researchGate爬虫案例

举报
冬晨夕阳 发表于 2022/03/31 00:50:38 2022/03/31
【摘要】 ResearchGate是科研社交网站,有很多的认证专家和学术爱好者。 本案例采集researchGate 的作者信息。 先抓包,有时候会有三次请求,有时一次即可。 第一次返回429,respon...

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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

目前参数的有效期具体时间不确定,不过可以通过状态码来判断。

如果返回 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:\Users\feiyi\Desktop\chromedriver.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'))


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

文章来源: blog.csdn.net,作者:考古学家lx,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_43582101/article/details/113524317

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。