[爬虫Demo] pyquery+csv爬取猫眼电影top100

站点分析

https://maoyan.com/board/4?offset=0

翻页操作只会改变offset偏移量,每部电影的信息都在dd标签内,使用pyquery库中的css选择器直接解析页面

代码君

  • css选择器直接选择和使用find()方法的区别:find()用于选择子节点,因此限定了选择的区域,速度可能要快些,直接传入‘’选择器可能要全盘扫描(这里只是为了我自己方便记忆,信息可能有误,欢迎指出)
  • 一般先直接传入选择器选择出包含所需信息的大标签,再使用find()选择大标签里面的细节信息
  • 还有需要注意的一点是,不能直接在Elements选项卡中直接查看源码,那里的源码可能经过JavaScript渲染而与原始请求不同,而是需要从Network选项卡部分查看原始请求得到的源码

使用csv格式存储:相比txt格式,csv格式更利于数据存储和处理,大规模数据可以使用数据库存储

#use pyquery get the data and save as csv
from pyquery import PyQuery as pq #as是为PyQuery类取一个别名
import csv
import time begin=time.clock() #添加程序开始时间 def get_page(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
#添加头部信息,防止被网站识别出是python爬虫而被禁止访问
doc=pq(url,headers=headers)
return doc def parse_page(doc):
dict={}
dd=doc('.board-wrapper').find('dd')
'''yield在函数中的功能类似于return,不同的是yield每次返回结果之后函数并没有退出,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用。如果一个函数需要多次循环执行一个动作,并且每次执行的结果都是需要的,这种场景很适合使用yield实现。'''
for item in dd.items():
yield { #返回一个字典
'rank':item.find('.board-index').text(),
'name':item.find('.name').text(),
'img':item.find('.board-img').attr('data-src'),
'star':item.find('.star').text(),
'time':item.find('.releasetime').text().strip(),#strip()转化为字符串去除前后空格,strip()[3:]表示从取下标从3的位置开始到文件结尾
'score':item.find('.score').find('.integer').text().strip()+item.find('.score').find('.fraction').text().strip(),
} def write_to_file(item): #接收一个字典
writer.writerow((item['rank'],item['name'],item['img'],item['star'],item['time'],item['score'])) def main():
for i in range(10):
url='https://maoyan.com/board/4?offset='+str(i*10)
doc=get_page(url)
#print(doc)
for item in parse_page(doc):
print(item)
write_to_file(item)
#线程推迟1s,一些反爬取网站,如果速度过快会无响应,故增加一个延时等待
time.sleep(1) if __name__ == '__main__':
f = open('test.csv', 'a', newline='', encoding='utf-8')
writer = csv.writer(f)
writer.writerow(('Rank','Name','Picture','Star','Time','Score'))#写入头部信息
main()
f.close() #手动关闭文件对象
end=time.clock() #添加程序结束时间
# 输出CPU耗时,不包括线程推迟的时间,是正常情况下(不考虑等待)程序的耗时
print("爬取完毕,CPU耗时:%f s"%(end-begin))

使用文本txt格式存储

'''pyquery get the data and save as txt'''
import json
import time
import requests
from pyquery import PyQuery as pq def get_page(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
doc=pq(url)
return doc def parse_page(doc): dd=doc('.board-wrapper').find('dd') for item in dd.items():
yield {
'index': item.find('.board-index').text(),
'image': item.find('.board-img').attr('data-src'),
'title': item.find('.name').text(),
'actor': item.find('.star').text().strip()[3:],
'time': item.find('.releasetime').text(),
'score': item.find('.score').find('.integer').text().strip() + item.find('.score').find(
'.fraction').text().strip()
} def write_to_file(item):
with open('test.csv','a',encoding='utf-8') as f:
f.write(json.dumps(item,ensure_ascii=False)+'\n')#False表示不使用ascii表示中文,可以直接显示中文 def main():
for i in range(10):
url = 'https://maoyan.com/board/4?offset='+str(i*10)
doc=get_page(url)
for item in parse_page(doc):
print(item)
write_to_file(item)

# [爬虫Demo] pyquery+csv爬取猫眼电影top100的更多相关文章

  1. # 爬虫连载系列(1)--爬取猫眼电影Top100

    前言 学习python有一段时间了,之前一直忙于学习数据分析,耽搁了原本计划的博客更新.趁着这段空闲时间,打算开始更新一个爬虫系列.内容大致包括:使用正则表达式.xpath.BeautifulSoup ...

  2. 爬虫练习之正则表达式爬取猫眼电影Top100

    #猫眼电影Top100import requests,re,timedef get_one_page(url): headers={ 'User-Agent':'Mozilla/5.0 (Window ...

  3. 爬虫系列(1)-----python爬取猫眼电影top100榜

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...

  4. PYTHON 爬虫笔记八:利用Requests+正则表达式爬取猫眼电影top100(实战项目一)

    利用Requests+正则表达式爬取猫眼电影top100 目标站点分析 流程框架 爬虫实战 使用requests库获取top100首页: import requests def get_one_pag ...

  5. 50 行代码教你爬取猫眼电影 TOP100 榜所有信息

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,恋习Python的手把手系列,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫 ...

  6. 40行代码爬取猫眼电影TOP100榜所有信息

    主要内容: 一.基础爬虫框架的三大模块 二.完整代码解析及效果展示 1️⃣  基础爬虫框架的三大模块 1.HTML下载器:利用requests模块下载HTML网页. 2.HTML解析器:利用re正则表 ...

  7. 用requests库爬取猫眼电影Top100

    这里需要注意一下,在爬取猫眼电影Top100时,网站设置了反爬虫机制,因此需要在requests库的get方法中添加headers,伪装成浏览器进行爬取 import requests from re ...

  8. python 爬取猫眼电影top100数据

    最近有爬虫相关的需求,所以上B站找了个视频(链接在文末)看了一下,做了一个小程序出来,大体上没有修改,只是在最后的存储上,由txt换成了excel. 简要需求:爬虫爬取 猫眼电影TOP100榜单 数据 ...

  9. 一起学爬虫——使用xpath库爬取猫眼电影国内票房榜

    之前分享了一篇使用requests库爬取豆瓣电影250的文章,今天继续分享使用xpath爬取猫眼电影热播口碑榜 XPATH语法 XPATH(XML Path Language)是一门用于从XML文件中 ...

随机推荐

  1. Android_(控件)使用ListView显示Android系统中SD卡的文件列表

    使用ListView显示Android SD卡中的文件列表 父类布局activity_main.xml,子类布局line.xml(一个文件的单独存放) 运行截图: 程序结构: <?xml ver ...

  2. 解决Vue刷新一瞬间出现样式未加载完或者出现Vue代码问题

    解决Vue刷新一瞬间出现样式未加载完或者出现Vue代码问题: <style> [v-cloak]{ display: none; } </style> <div id=& ...

  3. BZOJ1718分离的路径

    边双题. 求的就是最少加几条边可以使一个图变成边双联通图. 首先tarjan求一下边双,缩完点变成一颗树,统计度数为1的点(无根树的叶子),把这个数算出来,设为x,则ans=(x+1)/2. 这个可以 ...

  4. redis 持久化 RDB

    https://blog.csdn.net/u010028869/article/details/51792197

  5. 线程系列5--java中的ThreadLocal类实现线程范围内的数据共享(二)

    ThreadLocal类可以理解成一个类似与map集合使用,以当前线程当做key 来使用,将线程氛围内需要共享的数据当做value,形成键值对的形式使用.ThreadLocal和线程同步机制都是为了解 ...

  6. Mac平台最好用的万能开源免费播放器-IINA

    1.安装 1)官网下载地址 https://iina.io/ 2)brew 方式安装 testdeMacBook-Pro:~ test$ brew cask install iina Updating ...

  7. DP----鬼畜的数字三角形

    数字三角形 1   洛谷   P1216  数字金字塔 我们可以用 f [ i ] [ j ] 表示从(1,1)出发,到达(i,j)的最大权值和. (i , j)可以由 正上(i - 1 , j)或者 ...

  8. Vue-2:官方教程学习

    1,先把下面这些内容都按照官方教程敲一遍,打好基础,类似于“前戏”,其作用我想爸爸就不必多说了吧(づ。◕‿‿◕。)づ. https://cn.vuejs.org/v2/guide/ 同时可以配合配套视 ...

  9. C#汉字转换拼音技术详解(高性能)

    public static class ChineseToPinYin { private static readonly Dictionary<<span class="key ...

  10. C++学习 之 初识变量和基本类型 之 内置类型

    声明:            本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方. 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予 ...