【问题标题】:Web Scraping <td> tag issue - Python 3 With LxmlWeb Scraping <td> 标签问题 - 带有 Lxml 的 Python 3
【发布时间】:2017-02-25 23:04:31
【问题描述】:

我正在使用 lxml 库在 python 中进行网络抓取。而且,我正试图从棒球网站http://mlb.mlb.com/mlb/standings/exhibition.jsp?ymd=20161002 上刮取一些数据。 出于某种原因,我的代码在我之前打印的内容之后打印了一个空列表。在这个问题上的任何帮助都会很棒!

from lxml import html
import requests

page = requests.get('http://mlb.mlb.com/mlb/standings/exhibition.jsp?ymd=20161002')
tree = html.fromstring(page.content)
#This will create a list of buyers:
##buyers = tree.xpath('//div[@title="buyer-name"]/text()')
#This will create a list of prices
prices = tree.xpath('//td[@class="tg_w"]/text()')

print("Wins: ", prices)
print()
##print("Buyers: ", buyers)

【问题讨论】:

  • 我的猜测是您正在获取的页面不包含表格元素(td),它们是由 javascript/ajax 加载的,因此您可能会寻找 mlb.mlb.com 的 api

标签: python xpath web-scraping lxml


【解决方案1】:

HTML != XML。一些 html5 标签可能会混淆 XML 解析器。

尝试BeautifulSoup,并将解析器设置为html5lib

【讨论】:

  • 不完全是,lxml.html 实际上是一个 HTML 解析器:lxml.de/lxmlhtml.html。此外,使用 XML 解析器解析格式错误的 XML 将返回错误而不是空结果。
  • @MathiasMüller 这是真的。解析器成功解析了 html5,但一些自闭合标签,如 &lt;br&gt;&lt;input&gt; 会搞砸结构。如果您将 bs4 解析器设置为 lxml,然后漂亮地打印结果,您将看到这一点。
  • 不,自关闭标签不会破坏结构,即使在 XML 中也不会,自关闭(或未关闭)元素标签在这里不是问题。问题中描述的问题的可能解释是 a) 元素由 Javascript 生成或 b) 目标元素位于命名空间中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 2015-08-24
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 2018-04-07
相关资源
最近更新 更多