程序实现目标
用户输入电影类型,如【热门 最新 经典 华语】 可获得此分类排名 Top 100 电影信息(电影名 评分 封面链接)
程序实现工具
星愿浏览器 以chromium为内核,操作方法与 chorme类似
Microsoft Visual Studio
程序设计分析
以 华语电影 为例,抓取此类型的数据,其他电影类型以此类推
华语电影
1. 分析数据来源
通过观察源码中是否有数据,判断是否是动态加载
判断是否是动态加载
进入源代码界面,ctrl + f 搜索一个前端页面中展示出的电影名
例:此处搜索《流浪地球》得到结果为0
数据动态加载
2.查找电影信息位置
网页端按下 F12 调出浏览器的控制台;选择 network,按 F5 刷新
刷新后页面
依次选择 XHR 加载 json 链接 - response
此处可以清楚地看到我们所需的信息
点击 headers,查看其发送的链接地址和方法
关注 Request URL 和 Request Method
将 链接地址 复制到浏览器中加载,可以得到如下内容
华语电影信息
3. 获取更多电影信息
返回 选电影 界面,点击 加载更多 ,观察 链接 的变化
加载前 page_start=0
加载更多
加载后 page_start=20
得到结论:若要 加载更多,只需改变 page_start
程序设计过程
1. 引入所需的包
#coding=ut f-8
import requests
import time
import json
from lxml import etree
2. 创建一个类,并定义 init
(包含 url列表和请求头)
class DoubanMovieSpider:
def __init__(self):
# 定义一个url列表,可以存放各种类别的url链接,这里只存放了华语电影的链接
self.url_list_temp = [
{
"url_temp": "https://movie.douban.com/j/search_subjects?type=movie&tag=%E5%8D%8E%E8%AF%AD&sort=recommend&page_limit=20&page_start={}",
"country": "CN"
}
]
# 定义请求头headers
self.headers = {
"Accept" : "*/*",
"Accept-Encoding" : "gzip, deflate, br",
"Accept-Language" : "zh,zh-TW;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6",
"Connection" : "keep-alive",
"Host" : "movie.douban.com",
"Referer" : "https://movie.douban.com/explore",
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36",
"X-Requested-With" : "XMLHttpRequest"
}
3. 定义请求函数
# 定义请求函数
def parse_url(self, url):
try:
html_str = requests.get(url, heade