抓取时网站的意外行为-请求

时间:2018-07-11 14:21:23

标签: python web-scraping python-requests

我正试图从巴西政府那里抓取一个网站。 (http://www.tesouro.gov.br/resultados-dos-leiloes

我要获取的信息只是下表,其中包含“ Comunicados”,“ Resultados da Semana”和以下链接。

The table I want to scrape

我的问题是,该网站的行为方式与我一直在努力的方式不同。

通常,信息在元素部分,因此我可以直接通过请求将其抓取,或者在更复杂的站点中,我应该从Chrome Inspect中查找Network和XHR上的API。

在这种情况下,没有一个对我有用。

有人知道我怎么得到这张桌子吗?我认为这可能很简单(我希望如此!大声笑)

我认为这将无济于事,因为我的代码根本无法工作,但这是我的代码:

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 / Python 3.6-在Jupyter Lab上工作

1 个答案:

答案 0 :(得分:1)

此表中可能装有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()

ps。 您还可以使用phantomJS

这样的无头浏览器驱动程序

查看了该站点的html之后,我发现他们正在使用iFrame加载此数据,这意味着除非您提供iframe源URL,否则硒将无法工作。

因此,您所需的就是该iframe源网址,您也可以通过请求获取该数据

import requests

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