人民网搜索突破page页数limit参数的限制实现一次发包拉取10万数据

2022年4月7日 19:55 ry 724

之前接了个单,采集10w有关人工智能,物联网,大数据,区块链相关的数据,直接抓包调试,如图

请求方式是post,一般会有data参数,往下看,如图

注意,这里的变化的只有页数,一页数据限制10个,如果要10w数据,那岂不是要循环请求1w次,因此我想能不能一次全部拉下所有的数据,因此开始尝试修改limi,设置成10000,进行测试,结果果真可以,具体代码如下

from lxml import etree
import requests
import time
from bs4 import BeautifulSoup
import json
import re
import pandas as pd
from urllib.parse import quote
title_lis,content_lis,time_lis,from_lis = [], [], [] ,[]
def time_data(time_sj):     #传入参数
    data_sj = time.localtime(time_sj)
    time_str = time.strftime("%Y-%m-%d %H:%M:%S",data_sj)            #时间戳转换正常时间
    return time_str
def zh_sjc(time_):#转换为时间戳
    array = time.strptime(time_, "%Y-%m-%d %H:%M:%S")
    timeStamp = int(time.mktime(array))
    return timeStamp
keyword = ['人工智能','区块链','物联网','大数据']
for ky in keyword:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
        'Origin': 'http://search.people.cn',
        'Referer': 'http://search.people.cn/s/?keyword={}&st=0&_={}'.format(quote(ky),int(time.time())*1000),
        'Cookie': '__jsluid_h=add347822c2bf007b51f45c8a6113e80; sso_c=0; sfr=1',
    
    }
    
    print(int(time.time())*1000)
    url = 'http://search.people.cn/search-platform/front/search'
    datas = {
        'endTime': 0,
        'hasContent': 1,
        'hasTitle': 1,
        'isFuzzy': 1,
        'key': f'{ky}',
        'limit': 10000,
        # 'page': 1,
        'sortType': 2,
        'startTime': 0,
        'type': 0,
    }
    r = requests.post(url,headers=headers,json=datas)
    data1 = r.json()['data']['records']
    print(data1)
    print(len(data1))
    for i in data1:
        title = BeautifulSoup(i['title'],'html.parser').get_text()
        content = BeautifulSoup(i['content'],'html.parser').get_text()
        from_where = i['belongsName']
        tim = time_data(int(i['displayTime'])/1000)
        if zh_sjc('2009-01-01 23:59:59') <= int(i['displayTime'])/1000 <=zh_sjc('2021-12-31 23:59:59'):
            title_lis.append(title)
            content_lis.append(content)
            from_lis.append(from_where)
            time_lis.append(tim)
            print(title,content,from_where,tim)
df = pd.DataFrame({
    '标题':title_lis,
    '来源':from_lis,
    '时间':time_lis,
    '内容':content_lis,
})
df.to_csv('600_renmin.csv',index=False,encoding='utf_8_sig')
    

直接修改limit,然后删除page页数这个字段,直接拉取指定时间的几万数据 ,一个关键字实现一次请求数据。可能这是网站的一些页数bug吧,经过很多网站测试,不少网站存在这样的拉取数据库的bug,所有防止拿库数据很重要!

如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!

欢迎发表评论~

点击此处登录后即可评论


评论列表
2023年10月16日 22:40 ry: 回复
口嗨党,白嫖党勿扰勿加哈

2023年4月8日 22:21 ry: 回复
最新数据采集,需要的私我:qq:1449917271 微信liuyoudyping


赣ICP备2021001574号-1

赣公网安备 36092402000079号