回顾Xpath(爬取时光网电影TOP100)

import requests
from lxml import etree

#爬取时光电影网TOP100
headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36',
}

def get_information(html):
	infos = html.xpath('//*[@id="asyncRatingRegion"]/li')#找到循环节点
	for info in infos:
		#排名 图片链接 链接 电影名 导演 主演 类型 简介 评分
		rank = info.xpath('div[1]/em/text()')[0]#排名
		main_url = info.xpath('div[2]/a/@href')[0]#图片链接
		pic_url = info.xpath('div[2]/a/img/@src')[0]#电影信息链接
		name = info.xpath('div[2]/a/img/@alt')[0]#电影名字
		author = info.xpath('div[3]/p[1]/a/text()')[0]#导演

		#第三十名的格局不一样,要用if语句判断然后单独列出。
		#演员,因为人数不确定,直接全部抽取然后用切片全部提到列表里(下同)
		actor = info.xpath('div[3]/p[2]/a/text()')[:9]
		if actor:
			pass
		else:
			actor = ['此作品无主演信息!!']
			#要赋值成列表方式,要不然join会连接成['此','作','品'...'!','!']

		form = info.xpath('div[3]/p[3]/span/a/text()')[:9]
		if form:
			pass
		else:
			form = info.xpath('div[3]/p[2]/span/a/text()')[:9]

		main = info.xpath('div[3]/p[4]/text()')
		if main:
			main = main[0]
		else:
			main = info.xpath('div[3]/p[3]/text()')[0]

		point = info.xpath('div[4]/b/span/text()')[:9]

		#打开方式要用UTF-8,不然爬不下来。
		#把上面提取的是列表的用join方法连接成字符串。
		with open("F://时光电影.text",'a+',encoding = 'UTF-8') as fp:
			fp.write(str([rank, main_url, pic_url, name, author, ','.join(actor), ','.join(form), main, ''.join(point)]) + '\n')

if __name__ == "__main__":
	#构造翻页url
	urls = ["http://www.mtime.com/top/movie/top100/index-{}.html".format(i) for i in range(1,11)]
	#定义一个bool类型的标志flag,用于判断
	flag = True

	for url in urls:
		#因为第一个url和后面的不一致,需要单独列出来,然后利用flag更改第一个url
		if flag == True:
			url = "http://www.mtime.com/top/movie/top100/"
			flag = False
		else:
			pass
		print(url)#打印url,便于查看
		response = requests.get(url,headers = headers)

		html = etree.HTML(response.text)
		get_information(html)#调用函数

猜你喜欢

转载自blog.csdn.net/weixin_43901998/article/details/88584048
今日推荐