researchGate爬虫案例
2023-03-15 22:04:25 时间
ResearchGate是科研社交网站,有很多的认证专家和学术爱好者。 本案例采集researchGate 的作者信息。
先抓包,有时候会有三次请求,有时一次即可。
第一次返回429,response有一段script。复制到控制台上输出
可以看出是第二次发请求 ClientValidation.ajax.html ,验证浏览器
第二次验证后 success = true时,开始第三次请求base页面,获取数据。
经过对请求头的分析,在三次请求时不断的set-cookie,一次请求成功时cookie是完善的,所以成功与否取决于cookie的正确性。
而 cookie中 只认证了 sid 和 captui 。我猜测 sid 是账号认证参数, captui 是对浏览器环境的认证参数。
没有captui的时候会返回网络异常。
# -*- coding: utf-8 -*-
'''
复制浏览器的cookie进行测试
pip install lxpy
'''
import requests
from lxpy import copy_headers_dict
h = copy_headers_dict('''
cookie: sid=m8hIX......f0iLA2TZs; captui=MDdkYWViMWE5Y.......MWNBa0lqUGQ%3D;
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Win...... Safari/537.36
''')
url = 'https://www.researchgate.net/search/researcher?q=lx'
d = requests.get(url, headers=h).text
print(d)
目前参数的有效期具体时间不确定,不过可以通过状态码来判断。
如果返回 429,就按照三次请求,来获取cookie。
but 我发现在第二次验证的时候,是有验证码的,但是我这里没有合适的外网 = =
现在就先手动复制吧。或者到期时使用selenium获取新cookie。
代码:
# -*- coding: utf-8 -*-
import requests
import time
h = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
c = {
'captui':'OGRiMTYwNjMyMTBiY2E5OGYzZjViNTJhNjEwMzdiOGZmZmFjMDdlYjRlZWRiNjkyYzVkZGU4Njc3MTM4NGNhNF9TVzVYNFI2Y2pRd2tzcXJXSkxXVWd3eVVFYjBoMVpxNFpEdmU'
}
q = 'lx'
url = f'https://www.researchgate.net/search/researcher?q={q}'
d = requests.get(url, headers=h,cookies=c)
if d.status_code == 429:
print("cookies validation failed")
# 接下来应该进行验证,获取 cattui 后构建cookie,再次请求
# capUrl = f'https://www.researchgate.net/application.ClientValidation.html?origPath=/search/researcher?q={q}'
# cookies = requests.utils.dict_from_cookiejar(d.cookies)
# d = requests.get(capUrl, headers=h,cookies=cookies)
# 但是因为没外网,获取不到验证,这里采用其他方式获取新cookie,记得修改 executable_path
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r'C:UsersfeiyiDesktopchromedriver.exe')
driver.get(url)
time.sleep(5)
cookies = {}
for cook in driver.get_cookies():
cookies[cook['name']]=cook['value']
c.update(cookies)
d = requests.get(url, headers=h,cookies=c)
from lxml import etree
e = etree.HTML(d.text)
for li in e.xpath('//div[@class="nova-v-person-item__body"]'):
print(li.xpath('./div/div[1]/a/img/@src'))
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十