Python异步加载(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”,在里面寻找所提取的信息

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值