刮取请求时站点的意外行为

2024-03-28 19:55:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从巴西政府那里搜刮一个网站。(http://www.tesouro.gov.br/resultados-dos-leiloes

我想得到的信息只是下表,其中包含“Comunicados”、“Resultados da Semana”和以下链接。你知道吗

The table I want to scrape

我的问题是,这个网站的行为不同于所有我一直在工作。你知道吗

通常情况下,信息都在elements部分,所以我可以通过请求直接获取,或者,在更复杂的站点中,我应该从Chrome Inspect中查找网络上的API和XHR部分。你知道吗

在这种情况下,这些对我都不起作用。你知道吗

有人知道我怎么弄到这张桌子吗?我想可能很简单(希望如此!哈哈)

我不认为这会有帮助,因为我的代码根本不起作用,但下面是我的代码:

import requests
from bs4 import BeautifulSoup as bs
url = "http://www.tesouro.gov.br/resultados-dos-leiloes"

data = requests.get(url)
bsobj = bs(data.content, "lxml") #just a small part of the site is shown.

ps:MacOS High Sierra/Python3.6-在Jupyter实验室工作


Tags: 代码brimport信息httpbs网站www
1条回答
网友
1楼 · 发布于 2024-03-28 19:55:10

这个表可能加载了JavaScript,这就是为什么请求不能工作的原因。 您需要使用Selenium之类的工具来提取信息:

示例:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.tesouro.gov.br/resultados-dos-leiloes")
bsobj = bs(driver.page_source, "lxml")

driver.close()

附言。 您还可以使用无头浏览器驱动程序,如phantomJS

在查看了这个站点的html之后,我看到他们正在使用iFrame加载这些数据,这意味着selenium将无法工作,除非您提供iFrame源url。你知道吗

所以您只需要iframe源url,您也可以通过请求获取数据

import requests

res = requests.get('http://sisweb.tesouro.gov.br/apex/f?p=2501:6')
bsobj = bs(res.content, "lxml")
print(bsobj)

相关问题 更多 >