【问题标题】:Beautiful Soup doesn't 'get' full webpageBeautiful Soup 没有“获取”完整的网页
【发布时间】:2015-01-10 20:38:39
【问题描述】:

我正在使用 BeautifulSoup 解析来自this page 的一堆链接,但它没有提取出我想要的所有链接。为了找出原因,我将 html 下载到“web_page.html”并运行

soup = BeautifulSoup(open("web_page.html"))
print soup.get_text()

我注意到它不会打印整个网页。它在布拉克利结束。我查看了 html 代码,看看“Brackley”是否发生了一些奇怪的事情,但我找不到任何东西。另外,如果我将另一个链接移动到 Brackley 的位置,它将打印该链接而不是 Brackley。似乎它只会读取一定大小的html文件?

【问题讨论】:

    标签: python html web-scraping beautifulsoup


    【解决方案1】:

    尝试使用不同的解析器。您没有指定一个,因此您可能正在使用默认的html.parser。尝试使用lxmlhtml5lib

    欲了解更多信息:http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser

    【讨论】:

    • 这也是我的第一个想法,但是在html5libhtml.parserlxml 之间切换并没有什么不同——至少对于我使用的方法而言。谢谢。
    • @Mikki。谢谢。 html5lib 为我工作。我通过“将页面另存为”从 chrome 获得了 html。我仍然很困惑为什么其他解析器不起作用......
    【解决方案2】:

    不知道您是如何获得页面和链接的,这是我所做的并获得了从“加拿大”开始并以“Taloyoak,HAM”结尾的所有链接:

    from bs4 import BeautifulSoup
    import requests
    
    url = 'http://www12.statcan.gc.ca/census-recensement/2006/dp-pd/tbt/Geo-index-eng.cfm?TABID=5&LANG=E&APATH=3&DETAIL=0&DIM=0&FL=A&FREE=0&GC=0&GID=0&GK=0&GRP=1&PID=99015&PRID=0&PTYPE=88971,97154&S=0&SHOWALL=0&SUB=0&Temporal=2006&THEME=70&VID=0&VNAMEE=&VNAMEF=&D1=0&D2=0&D3=0&D4=0&D5=0&D6=0'
    response = requests.get(url)
    
    soup = BeautifulSoup(response.content)
    print [a.text for a in soup.select('div.span-8 ol li a')]
    

    打印:

    [
        u'Canada', 
        u'Newfoundland and Labrador / Terre-Neuve-et-Labrador',
        ...
        u'Gjoa Haven, HAM', 
        u'Taloyoak, HAM'
    ]
    

    仅供参考,div.span-8 ol li aCSS Selector

    【讨论】:

    • 正如另一个回应我也得到了这个结果。
    • @alecxe。感谢您的回答。我正在使用 httplib2 来获取页面,但这不起作用,所以我切换到使用“将页面另存为”从 chrome 保存文件。很高兴知道请求直接起作用。没想到/不知道要尝试。
    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2021-05-16
    • 1970-01-01
    相关资源
    最近更新 更多