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

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

猜你喜欢

转载自blog.csdn.net/myself029/article/details/80210919