【问题标题】:Cannot scrape this specific div class无法抓取此特定 div 类
【发布时间】:2019-08-26 16:26:14
【问题描述】:

我很好奇为什么我不能按如下方式获得这个类的 div 元素(以前在不同的站点上工作过)。可能是这个网站的问题?

from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests

url = "https://www.docmorris.de/produkte/abnehmen"
page=requests.get(url, headers=headers)

soup = BeautifulSoup(page.content, features="lxml")
divs=soup.find_all("div",attrs={"class": "l-product mod-standard product 
list-item ff-slider"})
print(divs)

打印一个空数组。我想要所有具有类 'l-product mod-standard product list-item ff-slider' 的 div 元素

【问题讨论】:

  • 你的类属性上有一个新行字符,我想这就是它不匹配的原因。我建议将其设为单行而不是 2 行。

标签: python web-scraping beautifulsoup


【解决方案1】:

你只需要一个类的多值,这样就不会那么脆弱了。此外,删除标题。

from bs4 import BeautifulSoup
import requests

url = "https://www.docmorris.de/produkte/abnehmen"
page = requests.get(url)  
soup = BeautifulSoup(page.content, features="lxml")
divs = soup.select('.l-product')
print(divs)

多值(更脆弱)将是:

divs = soup.select('.l-product.mod-standard.product.list-item.ff-slider')

或者(如 cmets - 确保在一行中):

divs = soup.find_all("div",attrs={"class": "l-product mod-standard product list-item ff-slider"})

【讨论】:

  • 但是如果你查看源代码,你会发现类名中没有点?!为什么要用点。为什么“.l-product”应该起作用?
  • 顶级版本是css选择的。在 css 选择器中,点是一个类选择器。您加入带有点且没有空格的多值类。您可以通过其任何单个值匹配具有多值的项目。诀窍是查看是否存在仍然唯一标识感兴趣元素(而不是其他元素)的那些类。
  • 上面的两个 cmets 都不能使用 soup.select('.l-product') 例如。
  • 你试过了吗?另外,我的方式和仅一行中的类名(之前也在一行中)不起作用
  • 谢谢它的工作我犯了一个愚蠢的错误并且我的网址拼写错误!很抱歉
猜你喜欢
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多