Python爬虫(六)

本文详细介绍了Python爬虫的增量爬取策略,包括如何处理动态加载网站数据,通过实例讲解了豆瓣电影数据的抓取。同时,深入探讨了json解析模块的用法,如`json.loads`、`json.dumps`等。此外,还展示了腾讯招聘数据的抓取以及使用多线程进行小米应用商店数据的抓取。最后,讲解了cookie模拟登录,以人人网为例,提供了多种登录方法的实现。
摘要由CSDN通过智能技术生成

增量爬取思路

1、将爬取过的地址存放到数据库中
2、程序爬取时先到数据库中查询比对,如果已经爬过则不会继续爬取

动态加载网站数据抓取

1、F12打开控制台,页面动作抓取网络数据包
2、抓取json文件URL地址
# 控制台中 XHR :异步加载的数据包
# XHR -> Query String Parameters(查询参数)

数据抓取最终梳理

# 响应内容中存在
1、确认抓取数据在响应内容中是否存在
2、分析页面结构,观察URL地址规律
   1、大体查看响应内容结构,查看是否有更改 -- (百度视频案例)
   2、查看页面跳转时URL地址变化,查看是否新跳转 -- (民政部案例)
3、开始码代码进行数据抓取

# 响应内容中不存在
1、确认抓取数据在响应内容中是否存在
2、F12抓包,开始刷新页面或执行某些行为,主要查看XHR异步加载数据包
   1、GET请求: Request Headers、Query String Paramters
   2、POST请求:Request Headers、FormData
3、观察查询参数或者Form表单数据规律,如果需要进行进一步抓包分析处理
   1、比如有道翻译的 salt+sign,抓取并分析JS做进一步处理
   2、此处注意请求头中的cookie和referer以及User-Agent
4、使用res.json()获取数据,利用列表或者字典的方法获取所需数据

动态加载网站抓取

1,右键—>查看网页源码,没有所抓取的数据

2,滚动鼠标滑轮,或者点击,或者其他动作,数据才会加载出来

3,局部网页刷新

豆瓣电影数据抓取案例

  • 目标
1、地址: 豆瓣电影 - 排行榜 - 剧情
2、目标: 电影名称、电影评分
  • F12抓包(XHR)
1、Request URL(基准URL地址) :https://movie.douban.com/j/chart/top_list?
2、Query String(查询参数)

# 抓取的查询参数如下:
type: 13 # 电影类型
interval_id: 100:90
action: ''
start: 0  # 每次加载电影的起始索引值 0 20 40 60 
limit: 20 # 每次加载的电影数量
  • 代码实现 - 全站抓取 - 完美接口 - 指定类型所有电影信息
import requests
import json
import re

from fake_useragent import UserAgent


class DouBan():
    def __init__(self):
        self.url = 'https://movie.douban.com/j/chart/top_list?'
        self.i = 0

    # 获取页面
    def pare_html(self, params):
        html = requests.get(url=self.url, params=params, headers={
   'User-agent': UserAgent().random}).text
        # json.loads():把json数据->python数据类型
        html = json.loads(html)
        # 提取数据
        item = {
   }
        for film in html:
            item['名字'] = film['title']
            item['评分'] = film['score']
            print(item)
            self.i += 1

    def run(self):
        type_dict = self.get_all()
        menu = ''
        for key in type_dict.keys():
            menu += ' {} '.format(key)
        print(menu)

        name = input("请输入电影类别:")
        #得到了type的值
        typ = type_dict[name]

        total = self.get_tatal(typ)
        #100个电影 range(0,100,20)
        for page in range(0, total, 20):
            params = {
   
                "type": typ,
                "interval_id": "100:90",
                "action": "",
                "start": str(page),
                "limit": "20",
            }

            self.pare_html(params)
        print("总数", self.i)

    def get_all(self):
        url = 'https://movie.douban.com/chart/'
        html = requests.get(url=url, headers={
   'User-Agent': UserAgent().random}).text
        p = re.compile('<a href=".*?type_name=(.*?)&type=(.*?)&.*?</a>', re.S)
        r_list = p.findall(html)
        # [('剧情','5'),('喜剧','24')]
        type_dict = {
   }
        for r in r_list:
            type_dict[r[0]] = r[1]

        return type_dict

    # 获取总页数
    def get_tatal(self,typ):
        url = 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值