您的位置:首页 > 其它

异步加载(Ajax)网页信息获取-以豆瓣电影为例

2018-12-21 11:21 363 查看

异步加载(Ajax)网页信息获取-以豆瓣电影为例

首先,对网页进行解析

import requests
from bs4 import BeautifulSoup
import json

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2714.400',
'X-Requested-With':'XMLHttpRequest',
'Host':'movie.douban.com',
'Referer':'https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action='}

url = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action='

# 爬取某一页的函数, 返回 json 格式
def get_page(page):
# 设置网页参数
params = {'start':page, 'limit':'20'}
try:
r = requests.get(url, params = params, headers = headers)
r.raise_for_status()
r.encoding = r.apparent_encoding
# 获取网页json格式,r.json()返回列表形式
return r.json(), page # 返回元组形式
except:
return '访问失败'

其次, 提取网页内容

# 获取页面信息
def parse_page(json):
result = []
# 获取返回元组的第一个元素,即获取电影网页的json文本, 为列表形式
json0 = json[0]
# 循环遍历每一个电影
for json in json0:
# json 为字典形式
data = {'orders':json.get('rank'),'names':json.get('title'),'types':json.get('types'),
'actors':json.get('actors'),'scores' :json.get('score')}
result.append(data)
return result

最后,写入json文件, 获取前10页的电影信息

# 写入json 文件
def write_to_file(content):
with open('猫眼动作电影.json','a', encoding = 'utf-8')as f:
f.write(json.dumps(content, ensure_ascii = False) + '\n')

# 获取前10页电影的信息
for i in range(0,10):
json1 = get_page(i * 20)
content = parse_page(json1)
for item in content:
print(item)
write_to_file(item)

注:异步加载获取网页url 和headers的方式如下:

打开网页——右击——检查——NetWork——XHR——选择“Name”下的第一行,单击——在”Requests Headers“ 中找到“X-Requested-With”,若其内容为“XMLHttpRequest”,则该行为加载页——在“General”中找到“Request URL”(该网页就是我们所需的URL)——接着找headers头部需要修改的信息——点击“Preview”,在里面寻找所提取的信息

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: