python - 如何在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 一样;这将通过select()
bs4 的方法应用。然后,您将需要.text
每个节点的属性。
file_list = [i.text for i in fp.select('.labelOptional_ind')]
推荐阅读
- maven - 运行 wildfly:run 目标后,有没有办法使用 maven build 进行处理?
- php - Polylang 翻译网址 slug 无法正常工作
- python - 如何将嵌套字典列表转换为 pandas 数据框?
- python - 如何在熊猫中滚动非重叠窗口
- c# - 避免对具有可为空类型/字段的泛型发出警告的最佳方法?
- c++ - 循环内的局部对象的析构函数是否保证在下一次迭代之前被调用?
- amazon-web-services - EKS / AWS 中的 Hazelcast 主节点选举是可能的吗?
- javascript - createObjectURL blob url 在 Chrome 中不安全
- r - 在 Jupyter Notebook 中无法访问 Anaconda 上的安装包
- matlab - 将像素从两个图像复制到相同大小的新矩阵和未定义的函数或变量