如何在python中用beautifulsoup(或其他)模拟来自rvest(来自R)的html_nodes



我有一个R脚本,我正试图在python中重新制作它。

在R中,我使用rvest包,但我很难在bs4中找到等效语法

myurllist<-"http://mis.ercot.com/misapp/GetReports.do?reportTypeId=12301&reportTitle=Settlement%20Point%20Prices%20at%20Resource%20Nodes,%20Hubs%20and%20Load%20Zones&showHTMLView=&mimicKey"
mylist<-GET(myurllist)
file_list<-mylist %>% read_html %>% html_nodes(".labelOptional_ind") %>% html_text
url_list<-read_html(mylist) %>% html_nodes("a") %>% html_attr('href')

当我运行它时,我会得到file_list,这是实际的文件名,而url_list是下载这些文件的链接。我不知道如何用python做同样的事情。

如果我这样做:

page=requests.get(myurllist)
fp= BeautifulSoup(page.content, 'lxml')
url_list_raw=fp.find_all('a')
url_list=[x['href'] for x in url_list_raw]

我可以用非常相似的语法得到url_list。如果我这样做,我可以破解url_list_raw以获得file_list

file_list=[x.parent.parent.parent.find('td').text for x in url_list_raw]

使用三重parent感觉很麻烦,而且可能会对网站进行一些小的更改。有更好的方法吗?

第二个版本的等效版本是在您的列表理解范围内继续使用css类选择器,就像使用rvest一样;这将通过bs4的CCD_ 9方法来应用。然后,您将需要每个节点的.text属性。

file_list = [i.text for i in fp.select('.labelOptional_ind')]

最新更新