Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 美丽的汤4找到所有的唐';我找不到Beauty Soup 3找到的链接_Python_Web_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 美丽的汤4找到所有的唐';我找不到Beauty Soup 3找到的链接

Python 美丽的汤4找到所有的唐';我找不到Beauty Soup 3找到的链接,python,web,web-scraping,beautifulsoup,Python,Web,Web Scraping,Beautifulsoup,我注意到了一个非常恼人的错误:BeautifulSoup4(包:bs4)经常发现比以前版本(包:BeautifulSoup)更少的标记 以下是该问题的可复制实例: import requests import bs4 import BeautifulSoup r = requests.get('http://wordpress.org/download/release-archive/') s4 = bs4.BeautifulSoup(r.text) s3 = BeautifulSoup.Be

我注意到了一个非常恼人的错误:BeautifulSoup4(包:
bs4
)经常发现比以前版本(包:
BeautifulSoup
)更少的标记

以下是该问题的可复制实例:

import requests
import bs4
import BeautifulSoup

r = requests.get('http://wordpress.org/download/release-archive/')
s4 = bs4.BeautifulSoup(r.text)
s3 = BeautifulSoup.BeautifulSoup(r.text)

print 'With BeautifulSoup 4 : {}'.format(len(s4.findAll('a')))
print 'With BeautifulSoup 3 : {}'.format(len(s3.findAll('a')))
输出:

With BeautifulSoup 4 : 557
With BeautifulSoup 3 : 1701
正如你所看到的,差别并不是很小

以下是模块的确切版本,以防有人怀疑:

In [20]: bs4.__version__
Out[20]: '4.2.1'

In [21]: BeautifulSoup.__version__
Out[21]: '3.2.1'

您已经安装了
lxml
,这意味着beautifulsoup4将在标准库
html.parser
选项上使用该解析器

您可以将lxml升级到3.2.1(对于我来说,它会为您的测试页面返回1701个结果);lxml本身使用了
libxml2
libxslt
,这可能也是原因之一。您可能还需要升级它们。看,;目前建议使用libxml2.7.8或更新版本

或者在解析soup时显式指定另一个解析器:

s4 = bs4.BeautifulSoup(r.text, 'html.parser')

这两种方法我都得到了
1701
。也许可以尝试对
s4
使用
find_all
,因为这应该用于
bs4
bs4使用可插入的解析器,如果安装了,将切换到“更好”的解析器。例如,如果安装了
lxml
,结果可能会有所不同。使用BS4的名称来了解为什么看到的结果如此之少。@Haidro:
.findAll()
.find_all()
的别名;两种方式都运行相同的代码。@halflings:从BS 4.2.0升级到4.2.1。现在
html5lib
也给了我1701,但仍然无法重现您的问题。在BS4.2.1、4.2.0、4.1.3和3.2.1上,无论有无html5lib,无需重新编程-所有1701不幸的是,升级lxml都没有帮助。另外,我找不到带有pip的libxml2和libxslt:
根本找不到libxml2的发行版;谢谢你的回答@半身人:
libxml2
不是python库,而是lxml使用的C库<代码>pip将无法升级:-PI拥有Ubuntu repos上的最新版本:2.9.0有趣;有可能是2.9.0在这里破坏了一些东西。哇,这一个实际上仍在工作。试试看,thebalitimes.com无法通过libxml获得它