【问题标题】:Unable to get correct response page using requests library无法使用请求库获得正确的响应页面
【发布时间】:2020-11-24 19:57:18
【问题描述】:

我正在尝试解析网页 https://xueqiu.com/S/SZ300816 上的 cmets。 但我无法通过请求库正确获取:

>>> url = 'https://xueqiu.com/S/SZ300816'
>>> headers
{'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'}
>>> response = requests.get(url, headers=headers)
>>> from bs4 import BeautifulSoup as bs4
>>> soup = bs4(response.text)
>>> soup.findAll('article', {'class': "timeline__item"})
[]
>>> 

有人可以建议我做错了什么吗?谢谢。

【问题讨论】:

  • 您期望的行为是什么?实际行为是什么?您是否查看了响应的文本以验证是否有一个类为 timeline__item 的元素? (请注意,在您的代码中,类名中有两个下划线)
  • 响应不包含
    元素,但它们在 chrome 加载的页面中。通常这意味着 javascript 正在填充它。您可以使用 selenium 打开浏览器并获取页面,而不是请求。

标签: python get scrapy request


【解决方案1】:

我从 chrome 开发工具的网络选项卡中获得了 url。从此 url 以 json 格式加载的数据。我尝试解决您的问题,希望对您有所帮助。

  from urllib.request import Request, urlopen
    from bs4 import BeautifulSoup as bs
    import requests
    import json
    headers={
        'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0',
    }
    def scrape(url):
        with requests.Session() as req:
            req.headers.update(headers)
            r = req.get(url)
            mydata =r.json()
            print(mydata['list'][0])
            print(mydata['list'][0]['text'])
            print(mydata['list'][0]['description'])
    
           
    url =  'https://xueqiu.com/query/v1/symbol/search/status?u=141606248084627&uuid=1331335789820403712&count=10&comment=0&symbol=SZ300816&hl=0&source=all&sort=&page=1&q=&type=11&session_token=null&access_token=db48cfe87b71562f38e03269b22f459d974aa8ae'
    scrape(url)

【讨论】:

  • 但是存在的访问令牌是 url 不是恒定的,你能建议一种如何自动提取的方法吗?
  • 谢谢。你说的是哪个代币?
  • 您在答案中发布的网址包含此参数 access_token=db48cfe87b71562f38e03269b22f459d974aa8ae,我说的是这个访问令牌。
  • 可以得到 print(r.request.path_url.split('&')[-1]) 命令。我通过检查从网络选项卡获得了 url。这是详细信息geeksforgeeks.org/http-headers-location/…。响应标头中位置选项卡中的访问令牌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多