【问题标题】:Parsing HTML with requests and BeautifulSoup使用请求和 BeautifulSoup 解析 HTML
【发布时间】:2015-02-16 16:02:22
【问题描述】:

我不确定我是否正确地处理了这个问题。我正在使用请求进行 GET:

con = s.get(url)

当我调用 con.content 时,整个页面都在那里。但是当我将 con 传递给 BS 时:

soup = BeautifulSoup(con.content)
print(soup.a)

我没有。里面有很多标签,不是在任何 JS 后面,是我调用 con.content 时预设的,但是当我尝试用 BS 解析时,大部分页面都不存在。

【问题讨论】:

  • 你能提供你得到的网址吗?
  • 很遗憾没有。这是工作的东西,使用 VPN。如果您正在寻找特定的东西,我可能会为您提供一些经过编辑的代码供您查看。
  • 看看你传递给 BS 的内容会很有帮助。
  • soup 包含什么?
  • 汤是con.content,通过BS。 con.content 是一个包含 GET 请求响应的大字符串。

标签: python python-2.7 beautifulsoup python-requests


【解决方案1】:

a 标签可能不在顶层。

soup.find_all('a')

可能是你想要的。

总的来说,我发现lxml 更可靠、API 一致且速度更快。是的,更可靠 - 我曾多次遇到 BeautifulSoup 无法解析它们的文档,但 lxml 在其健壮模式 lxml.html.soupparser 中仍然运行良好。还有lxml.etree API 真的很容易使用。

【讨论】:

  • find_all 也不返回任何内容。我会试试lxml。感谢您的建议
【解决方案2】:

无法看到你得到的 html,我只是在黑客新闻网站上做了这个,它会按预期返回所有 a 标签。

import requests
from bs4 import BeautifulSoup

s = requests.session()

con = s.get('https://news.ycombinator.com/')

soup = BeautifulSoup(con.text)

links = soup.findAll('a')

for link in links:
    print link

【讨论】:

    【解决方案3】:

    把解析器改成html5lib

    pip install html5lib
    

    然后,

    soup = BeautifulSoup(con.content,'html5lib')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-10
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多