我使用BeautifulSoup 4抓取网站并生成一个像魅力一样的脚本。但当我更换计算机并在另一台计算机上尝试脚本时,它突然开始发出错误。错误的原因是我使用了css搜索,这是BS的新功能,对最新版本有效。具体搜索如下:
soup.findAll(class_="class-name")
“class-name”存在于网页中,它确实可以正常工作。问题是,新计算机有些无法成功解析网页,无法检测到任何名为“class-name”的类。正如您所料,上面的搜索返回一个空列表。
我安装了html5lib
和lxml
,一起和单独安装:没有任何改变。我确保在两种不同的情况下使用lxml
和html5lib
进行BS解析,并使用以下行:
page = urllib2.urlopen("url")
soup = BeautifulSoup(page.read(),"html5lib")
或
soup = BeautifulSoup(page.read(),"lxml")
再也没有改变。搜索返回一个空列表。请帮帮我。顺便说一句,我正在寻找一个点到点的答案,只是帮助我让BS创建一个正确的解析。请尽量不要提出要求我在脚本中进行大量更改的建议。正如我之前所说,它正在发挥作用。
提前致谢。
根据评论,我提出了一个简短的失败例子。顺便说一下,除了python之外,两台计算机上的所有版本都是相同的。脚本工作的计算机有pyhton 2.6,另一个有2.7。但我认为这不是原因。
from bs4 import BeautifulSoup
import urllib2
page = urllib2.urlopen("www.website.com/some extensions...")
soup = BeautifulSoup(page.read())
#Now I need information that is included in a class called any_class. The info's
#html tag is 'i' and I want to extract the text in that tag, for the first appearance
#of any_class on the page
text = soup.findAll(class_="any_class")[0].i.text
现在我导航到命令行并运行脚本。
$ ./crawler.py
#Index Error! List out of Index!
我希望你现在一切都清楚了。如您所见,soup.findAll返回“any_class”类搜索的空列表。 BS显然找不到页面上几乎找不到的“any_class”。我强烈认为问题是解析器问题。我猜python坚持使用它的默认“html.parser”而不是我安装的lxml和html5lib。您还可以在答案中包含一个简短指南,说明我应该如何声明我要用lxml或html5lib为BS解析python。