如何从网站中提取冠状病毒病例?

2024-05-10

我正在尝试从网站中提取冠状病毒(https://www.trackcorona.live https://www.trackcorona.live)但我得到了一个错误。

这是我的代码:

response = requests.get('https://www.trackcorona.live')
data = BeautifulSoup(response.text,'html.parser')
li = data.find_all(class_='numbers')
confirmed = int(li[0].get_text())
print('Confirmed Cases:', confirmed)

它给出了以下错误(尽管它在几天前工作),因为它返回一个空列表(li)

 IndexError                               
 Traceback (most recent call last)
<ipython-input-15-7a09f39edc9d> in <module>
      2 data=BeautifulSoup(response.text,'html.parser')
      3 li=data.find_all(class_='numbers')
----> 4 confirmed = int(li[0].get_text())
      5 countries = li[1].get_text()
      6 dead = int(li[3].get_text())

IndexError: list index out of range


好吧,实际上该网站正在生成一个重定向CloudFlare,然后通过动态加载JavaScript一旦页面加载,因此我们可以使用多种方法,例如selenium and requests_html但我会为您提到最快的解决方案,因为我们将呈现JS在飞行中:)

import cloudscraper
from bs4 import BeautifulSoup

scraper = cloudscraper.create_scraper()

html = scraper.get("https://www.trackcorona.live/").text

soup = BeautifulSoup(html, 'html.parser')

confirmed = soup.find("a", id="valueTot").text

print(confirmed)

Output:

110981

提示503 response code:

基本上该代码指的是service unavailable.

更技术地说,GET无法满足您发送的请求。原因是因为请求被困在receiver的请求是https://www.trackcorona.live/ https://www.trackcorona.live/它在哪里将其处理到同一个源上的另一个源HOST这是https://www.trackcorona.live/?cf_chl_jschl_tk= https://www.trackcorona.live/?__cf_chl_jschl_tk__=

Where __cf_chl_jschl_tk__=正在持有一个token进行身份验证。

所以你通常应该按照你的代码来服务host与所需的数据。

如下所示end url:

import requests
from bs4 import BeautifulSoup


def Main():
    with requests.Session() as req:
        url = "https://www.trackcorona.live"
        r = req.get(url)
        soup = BeautifulSoup(r.text, 'html.parser')
        redirect = f"{url}{soup.find('form', id='challenge-form').get('action')}"
        print(redirect)


Main()

Output:

https://www.trackcorona.live/?__cf_chl_jschl_tk__=575fd56c234f0804bd8c87699cb666f0e7a1a114-1583762269-0-AYhCh90kwsOry_PAJXNLA0j6lDm0RazZpssum94DJw013Z4EvguHAyhBvcbhRvNFWERtJ6uDUC5gOG6r64TOrAcqEIni_-z1fjzj2uhEL5DvkbKwBaqMeIZkB7Ax1V8kV_EgIzBAeD2t6j7jBZ9-bsgBBX9SyQRSALSHT7eXjz8r1RjQT0SCzuSBo1xpAqktNFf-qME8HZ7fEOHAnBIhv8a0eod8mDmIBDCU2-r6NSOw49BAxDTDL57YAnmCibqdwjv8y3Yf8rYzm2bPh74SxVc

现在可以结束了URL所以你需要通过所需的Form-Data:

像这样的东西:

def Main():
    with requests.Session() as req:
        url = "https://www.trackcorona.live"
        r = req.get(url)
        soup = BeautifulSoup(r.text, 'html.parser')
        redirect = f"{url}{soup.find('form', id='challenge-form').get('action')}"
        data = {
            'r': 'none',
            'jschl_vc': 'none',
            'pass': 'none',
            'jschl_answer': 'none'
        }
        r = req.post(redirect, data=data)
        print(r.text)




Main()

在这里你最终会得到text没有你想要的价值观。因为你的值是通过呈现的JS.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从网站中提取冠状病毒病例? 的相关文章

随机推荐