上次使用beautifulsoup 爬取了猫眼电影TOP100,这次利用最近学习的pyquery再次实战了,感觉比bs4比较好用。
下面分享代码如下,欢迎交流。
from pyquery import PyQuery as pq import requests import os import time begin = time.clock() # 添加程序运行计时功能。 file_path = 'D:\python3.6\scrapy\猫眼' # 定义文件夹,方便后续check文件夹是否存在 file_name = 'maoyan.txt' # 自定义命名文件名称, file = file_path+'\\'+file_name # 创建文件全地址,方便后续引用 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"} start = "http://maoyan.com/board/4" # 获取url的开始页 flage='?offset=' # url 变化的标志 node='dd' # 目标url 对应html 中目标节点 step=10 # url 变化的步进长度 length=100 # url 变化的max def create_file(file_path,file): # 定义 检查和创建目标文件夹和文件的函数 if os.path.exists(file_path)== False: # check文件夹不存在 os.makedirs(file_path) # 创建新的自定义文件夹 fp = open(file,'w') # 创建新的自定义文件 # "w" 以写方式打开,只能写文件,如果文件不存在,创建该文件;如果文件已存在,先清空,再打开文件 elif os.path.exists(file_path)== True: # check文件夹存在 with open(file, 'w', encoding='utf-8') as f: # 打开目标文件夹中的文件 f.seek(0) # f.seek(offset[,where])把文件指针移动到相对于where的offset位置。where为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾 f.truncate() #清空文件内容,注意:仅当以 "r+" "rb+" "w" "wb" "wb+"等以可写模式打开的文件才可以执行该功能 create_file(file_path,file) for n in range(0,length,step): #安装url步进变化爬取每页目标内容, 并存储到本地 dict ={} #创建空字典,用于存储爬取的内容 if n==0: # 获取首页url url=start i=n+1 # 自定义 i 表示爬取页数页 else : # 首页以外url定义 url=start+flage+str(n) i=(n/10)+1 r = requests.get(url,headers=headers) # 获取每页的html doc=pq(r.text) # 利用ququery类进行解析 page=doc.find(node) # 查找所有node的内容 for data in page.items(): # 遍历该页所有node的内容,并获取对应的目标值,然后写入本地 # print(data,type(data)) # 检验data类型 # print('1'*50) index = data.children('i').text() name = data.find('.name').text() star = data.find('.star').text() releasetime = data.find('.releasetime').text() score = data.find('.score').text() dict['index']=index dict['name']=name dict['star']=star dict['releasetime']=releasetime dict['score']=score with open(file, 'a', encoding='utf-8') as f: # 打开目标file文件 f.write(str(dict)+'\n') # 注意添加 换行符 '\n',实现每个dict自动换行写入txt中 print('第%d页爬取完毕!'%(i)) end = time.clock() # 添加程序运行计时功能。 print("爬取完毕,耗时:%f"%(end-begin))