网站是thingiverse这样的产品网站

2024-09-30 02:20:15 发布

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

我是一个非常新的网站垃圾,我正在尝试做一个小项目,我可以刮一个网站,如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大小的列表。我做错了什么


Tags: 文件项目列表网站page关键字class垃圾
1条回答
网友
1楼 · 发布于 2024-09-30 02:20:15

对于原始问题:

Class作为字典项传递。因此,将代码更改为soup.find_all('div', { 'class' :'SearchResult__searchResultItem c4VZk'})

此演示美化了抓取html的过程:

from bs4 import BeautifulSoup

html = '''<div class="SearchResult__searchResultItem c4VZk">Test</div>'''
soup=BeautifulSoup(html,'html.parser')
Result_list = soup.find_all('div', { 'class' :'SearchResult__searchResultItem c4VZk'})
print(Result_list)

输出:

[<div class="SearchResult__searchResultItem c4VZk">Test</div>]

对于您编辑的问题:

BeautifulSoup(page, "lxml")这将传入响应对象,而不是HTML。响应对象将包含HTTP状态、头和各种信息。要获取HTML,请尝试html = page.read()

该网站正在通过JavaScript加载html标记。因此urllib.request/BeautifulSoup将无法提取数据。您可以通过使用print(soup.prettify())打印html来测试这一点。要解决这个问题,您可以使用某种web自动化工具,如selenium

网站按预期返回了HTML。刮码看起来像:

from urllib.request import urlopen
from bs4 import BeautifulSoup

with urlopen("https://www.thingiverse.com/search?q=vader&type=things&sort=relevant") as response:
      html = page.read()
      soup = BeautifulSoup(html, "lxml")
      print(soup.prettify()) # The HTML tag does not appear as it's generate by JavaScript.
      product_list = soup.find_all({ 'class' :'SearchResult__searchResultItem c4VZk'})
      print(product_list)

相关问题 更多 >

    热门问题