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

环境

  • webbrowser
  • urllib
  • requests v2.21.0

实现功能

过程

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

python爬虫——爬取豆瓣热门电影海报生成html文件_第1张图片

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

from bs4 import BeautifulSoup
from urllib import request

url = "https://movie.douban.com/"
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)

'''
输入如下:

'''

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

https://blog.csdn.net/datacastle/article/details/78812575

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

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

python爬虫——爬取豆瓣热门电影海报生成html文件_第2张图片

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

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

# -*- coding:utf-8 -*-
"""
time   = '2019/1/19 20:51'
author = 'Gregory'
filename = 'GoKu_craw.py'
"""
from urllib import request, parse
import webbrowser
import requests

start_html = '''



    
    我的热门电影
    


    

最近热门电影

''' url_json = 'https://movie.douban.com/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('\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要手动创建 # 构造html item_html = ''' '''.format(title,rate,url) #构建存电影信息的表格 file.write(item_html) if i % 4 == 3: #一行结束 file.write('\n') end_html = '''
{0}
{0}
{1}
''' 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")

运行如下:

python爬虫——爬取豆瓣热门电影海报生成html文件_第3张图片

本地海报:

python爬虫——爬取豆瓣热门电影海报生成html文件_第4张图片

 

你可能感兴趣的:(python)