欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python爬虫实战:利用pyquery爬取猫眼电影TOP100榜单内容-1

程序员文章站 2022-03-02 19:25:31
...

上次使用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))