Python BS4 find()find_all()返回空列表

Python BS4 find()find_all()返回空列表,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,Hy,我正在尝试抓取一个网站,但是python find()find_all()方法返回空列表,我尝试了html5.parser、html5lib和lxml,但仍然没有成功。 我正在尝试刮取的类在源代码和soup对象中都存在,但似乎没有工作,任何帮助都将不胜感激,谢谢 代码: 你的应该也可以(我使用了不同的语法)。但是你的字符串不匹配 您有:'story\uu title-size-five-text-black-font-playfair display' 我有:'story\uu title

Hy,我正在尝试抓取一个网站,但是python find()find_all()方法返回空列表,我尝试了html5.parser、html5lib和lxml,但仍然没有成功。 我正在尝试刮取的类在源代码和soup对象中都存在,但似乎没有工作,任何帮助都将不胜感激,谢谢

代码:

你的应该也可以(我使用了不同的语法)。但是你的字符串不匹配

您有:
'story\uu title-size-five-text-black-font-playfair display'

我有:
'story\uu title size五个文本黑色字体--playfair display'
这是一个非常细微的差别

替换:

url1Section1=soup1.find_all('h2', class_='story__title-size-five-text-black- font--playfair-display')
与:


看看这是否有帮助

我认为你不能像那样传递复合类名。我使用的是复合类名。我使用css选择器作为更快的检索方法。化合物中填充“.”

如果要查找标题,可以使用稍微不同的选择器组合

import requests
from bs4 import BeautifulSoup

url= 'https://www.dawn.com/pakistan'
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml")
items = [item.text.strip() for item in soup.select('h2[data-layout=story] a')]
print(items)
要仅限于左侧,您可以使用:

items = [item.text.strip() for item in soup.select('.story__title.size-five.text-black.font--playfair-display a' )]
更广泛地说

items = [item.text.strip() for item in soup.select('article [data-layout=story]')] 

根据你的评论:

items = [item.text.strip() for item in soup.select('.col-sm-6.col-12')] 

可能重复我试图获取特定类,然后通过进一步刮取从中提取数据,当我使用特定类名跟踪“div”和“article”时,我不理解空列表和“none”返回类型。我尝试了所有不同的解析器,但没有运气。我的问题是不同的,它与标记的重复答案无关,任何帮助将不胜感激谢谢!我试图获取特定的类,然后通过进一步的抓取从中提取数据,当我使用特定的类名查找“div”和“articles”时,我不理解空列表和“none”返回类型。我尝试了所有不同的解析器,但没有成功。这里有一个抓取上面文章的例子。在这里面,div中没有内容。你能给出一个你希望看到的div内容的具体例子吗?我尝试使用url1Section1=soup1获取的类名是什么。find_all('h2',class='story'-size-five-text-black-font-playfair display')返回空或无,我尝试了所有的解析器,但运气不佳。它工作正常,但当我尝试url1Section1=soup1.find_all时('h2',class='story''uu title-size-five-text-black-font--playfair display')对于其他类,它返回空列表或无列表,我无法理解我遇到的问题,例如,我的此类代码无法工作url1Section1=soup1.find_all('div',class='col sm-6 col-12')。我想这是因为空格。这些是复合类名。我使用css选择器作为一种更快的检索方法,您可以用“.”填充空格在类名中。哦,非常感谢它起了作用,请你解释一下,这是如何起作用的,我的没有起作用,因为我一直在用它来刮取其他站点,而我的站点以前工作得很好,但在这个站点上不起作用。你使用的语法在bs4文档中找不到使用类名刮取的地方。它不是我刚刚习惯使用的语法。但是你的方式也很有效。你的类是你的字符串。它不完全是源html中的内容。总之,如果答案有效,请接受答案。干杯!哦,我对字符串的错误,请看一下这个类名url1Section1=soup1.find_all('div',class='col-sm-6 col-12')不管发生什么,它都会返回空列表。这很奇怪,我从该代码中返回了7个对象是的,在inspect元素类中很奇怪,col-sm-6 col-12在col-sm-6和col-12之间有两个空格,但是在页面源代码中,它在两个空格之间有一个空格,所以当你使用find_all找到一个有两个空格的对象时,它会返回空列表,但是t当你用find_all找到一个有一个空格的时候,它返回8个对象,我不知道为什么html在inspect元素窗口和page源窗口中表现不同。
items = [item.text.strip() for item in soup.select('article [data-layout=story]')] 
items = [item.text.strip() for item in soup.select('.col-sm-6.col-12')]