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)#调用函数
回顾Xpath(爬取时光网电影TOP100)
猜你喜欢
转载自blog.csdn.net/weixin_43901998/article/details/88584048
今日推荐
周排行