600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python爬虫——爬取豆瓣热门电影海报生成html文件

python爬虫——爬取豆瓣热门电影海报生成html文件

时间:2018-08-01 17:44:15

相关推荐

python爬虫——爬取豆瓣热门电影海报生成html文件

环境

webbrowserurllibrequests v2.21.0

实现功能

过程

1.查看豆瓣热门电影模块源码:

看到其所在class为list-wp,我们想通过urllib里面的request,来获取豆瓣html源码,然后查找热门电影所在的位置,然后解析里面的信息。使用代码如下:

from bs4 import BeautifulSoupfrom urllib import requesturl = "/"def gethtml():req = request.urlopen(url)return req.read().decode('utf-8')def get_movie_list(html):#构建soup对象,用来解析,查找html元素soup = BeautifulSoup(html,'lxml')movie_list = soup.find('div','list-wp') #找到class为List-wp的div标签,返回为找到的div标签print(movie_list)if __name__ == "__main__":html = gethtml()get_movie_list(html)'''输入如下:<div class="list-wp"><div class="list"></div><a class="more" href="javascript:;">载入中...</a></div>'''

我们发现爬取的html是未加载全的html,根据如下博客:

/datacastle/article/details/78812575

2.第二次发送请求,获取数据

查看XHR请求,发现第二次请求的网页如下:

我们发现,第二次请求的页面获取的是json数据,我们需要的电影海报、名称、评分等信息都再json里面了,也就是说,我们可以直接请求json页面,获取json数据,然后根据电影信息构造html文件。接下来就是实现过程:

3.从json页面爬电影信息,构造html

# -*- coding:utf-8 -*-"""time = '/1/19 20:51'author = 'Gregory'filename = 'GoKu_craw.py'"""from urllib import request, parseimport webbrowserimport requestsstart_html = '''<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>我的热门电影</title><style>.text{display: block;font-size: 8px;text-align:center;}</style></head><body><h1 style="text-align:center">最近热门电影</h1><table align="center">'''url_json = '/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0'#从网页中获取json数据def getjson():req = requests.get(url_json).json()return req#从json中读取所有的热门电影,下载海报,并根据电影信息构造html,写入文件def get_movie_list(json):file = open('我的热门电影.html','w',encoding='utf-8')file.write(start_html) #将构造的html开始部分写入文件for i in range(50):#json中请求有50条数据,我们都将它爬取出来if i % 4 == 0:#爬取4条数据,换行file.write('<tr>\n')dic = json['subjects'][i] #从json中获取每部电影的信息字典rate = dic['rate'] #这是我们需要的评分url = dic['url'] #豆瓣上的地址title = dic['title'] #电影名称pic = dic['cover'] #电影海报request.urlretrieve(pic, "img//{}.jpg".format(title)) #保存电影海报到本地img文件夹下,注意img要手动创建# 构造htmlitem_html = '''<td><a href="{2}"><img alt="{0}" src="img//{0}.jpg" /><div class="text">{0}</div><div class="text">{1}</div></a></td>'''.format(title,rate,url) #构建存电影信息的表格file.write(item_html)if i % 4 == 3:#一行结束file.write('</tr>\n')end_html = '''</tr></table></body></html>'''file.write(end_html)#将html剩余部分写入文件file.close()#用浏览器打开html文件def drive_html(html_file):webbrowser.open(html_file)if __name__ == "__main__":json = getjson()get_movie_list(json)drive_html("我的热门电影.html")

运行如下:

本地海报:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。