【问题标题】:BeautifulSoup not finding tr idBeautifulSoup 没有找到 tr id
【发布时间】:2017-01-12 19:38:25
【问题描述】:

我已经使用 python 2.7.12 中的 requests 和 BeautifulSoup 模块运行了这个网络抓取练习。我的问题是我似乎无法让soup对象根据id返回特定的tr,以及我随机选择的一些其他带有id的html元素,包括以下打印语句中的元素。知道为什么这不起作用吗?任何帮助将不胜感激。

import requests
from bs4 import BeautifulSoup as bs

head= {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
'Content-Type': 'text/html',}

r = requests.get('http://www.iii.co.uk/investment/detail?code=cotn:LSE:SEE&display=discussion', headers=head)

r_text = r.text
soup = bs(r_text, "html.parser")

print soup.find("tr",id="disc1-12056888")
print soup.find('table', id='discussion-list')

【问题讨论】:

  • 使用BS而不是其他库的任何具体原因?对于更简单的事情,我喜欢使用PyQuery,它使用 DOM 选择器来提取信息。
  • 你能分享一下 r_text 吗?
  • @RafaelAguilar 不。只是想为 cmets 抓取该站点。你会为此推荐 PyQuery 吗?
  • @Shijo 不,我尝试通过堆栈将其识别为垃圾邮件
  • 当您执行print soup 时,您看到tr 您正试图加入汤吗?

标签: python web-scraping beautifulsoup


【解决方案1】:

我相信html.parser是不稳定的是python2,使用lxml或者html5lib

soup = bs(r_text, "lxml")

此引用来自Document

如果可以,我建议您安装并使用 lxml 以提高速度。如果你是 使用早于 2.7.3 的 Python 2 版本,或 Python 版本 3 早于 3.2.2,安装 lxml 或 html5lib-Python 的内置 HTML 解析器在旧版本中不是很好 版本。

【讨论】:

  • 非常感谢!!!我一直在努力寻找造成这种情况的原因。仅供我以后参考,是否有一个特定的地方可以找出我正在使用的包和版本组合中是否存在错误?
  • @AndrewF 我知道这个错误的原因是我在堆栈溢出中回答了很多这个问题。如果可以,我建议您安装并使用 lxml 以提高速度。如果您使用的是早于 2.7.3 的 Python 2 版本,或者早于 3.2.2 的 Python 3 版本,则必须安装 lxml 或 html5lib——Python 的内置 HTML 解析器在旧版本中不是很好版本。
【解决方案2】:

@AndrewF:

我建议您使用PyQuery 来完成更简单的任务,例如提取 cmets,这里有一个 sn-p 来展示它的简单性:

import requests
import pyquery

head= {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
'Content-Type': 'text/html',}

r = requests.get('http://www.iii.co.uk/investment/detail?code=cotn:LSE:SEE&display=discussion', headers=head)

r_text = r.text
pq = pyquery.PyQuery(r_text)

for a in pq('tr.comment div'):
    if a.text.strip():
        print(a.text.strip())

【讨论】:

  • 谢谢!这确实被证明是一种更简单的方法。
猜你喜欢
  • 2016-05-27
  • 2018-03-28
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多