我是一个非常新的网站垃圾,我正在尝试做一个小项目,我可以刮一个网站,如Thingiverse或类似的不同CAD(或类似)文件显示。我试图为一个特定的搜索关键字获得一个所有结果的列表。当我查看网站时,不同的产品会在HTML的这一部分突出显示:
<div class="SearchResult__searchResultItem--c4VZk">
但是,当我进入脚本并键入以下内容时:
11月29日编辑:
from bs4 import BeautifulSoup
page = urlopen("https://www.thingiverse.com/search?q=vader&type=things&sort=relevant")
soup = BeautifulSoup(page, "lxml")
product_list = soup.find_all({ 'class' :'SearchResult__searchResultItem--c4VZk'})
我得到一个0大小的列表。我做错了什么
对于原始问题:
Class
作为字典项传递。因此,将代码更改为soup.find_all('div', { 'class' :'SearchResult__searchResultItem c4VZk'})
此演示美化了抓取html的过程:
输出:
对于您编辑的问题:
BeautifulSoup(page, "lxml")
这将传入响应对象,而不是HTML。响应对象将包含HTTP状态、头和各种信息。要获取HTML,请尝试html = page.read()
该网站正在通过JavaScript加载html标记。因此
urllib.request
/BeautifulSoup
将无法提取数据。您可以通过使用print(soup.prettify())
打印html来测试这一点。要解决这个问题,您可以使用某种web自动化工具,如selenium
网站按预期返回了HTML。刮码看起来像:
相关问题 更多 >
编程相关推荐