之前接了个单,采集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,所有防止拿库数据很重要!
点击此处登录后即可评论