使用lxml和Xpath刮取元素

垫料

我遇到的问题是刮除元素本身。我可以抓取前两个(IncidentNbr和DispatchTime),但是我无法获取地址...(1300 Dunn Ave),我希望能够抓取该元素,但又要使其具有足够的动态性,所以我不能实际解析为“ 1300 Dunn Ave”,我正在解析该元素。这是源代码

<td><span id="lstCallsForService_ctrl0_lblIncidentNbr">150318182198</span></td>
<td><nobr><span id="lstCallsForService_ctrl0_lblDispatchTime">3-18 10:25</span></nobr></td>
<td>
    <a id="lstCallsForService_ctrl0_lnkAddress" href="https://maps.google.com/?q=1300 DUNN AVE, Jacksonville, FL" target="_blank" style="text-decoration:underline;">1300 DUNN AVE</a>
</td>

这是我的代码:

from lxml import html
import requests

page = requests.get('http://callsforservice.jaxsheriff.org/')
tree = html.fromstring(page.text)

callSignal = tree.xpath('//span[@id="lstCallsForService_ctrl0_lblIncidentNbr"]/text()')
dispatchTime = tree.xpath('//span[@id="lstCallsForService_ctrl0_lblDispatchTime"]/text()')
location = tree.xpath('//span[@id="lstCallsForService_ctrl0_lnkAddress"]/text()')



print 'Call Signal: ', callSignal
print "Dispatch Time: ", dispatchTime
print "Location: ", location

这是我的输出:

Call Signal:  ['150318182198']
Dispatch Time:  ['3-18 10:25']
Location:  []

关于如何抓取地址的任何想法吗?

ec

首先,它是一个a元素,而不是一个span而且您需要在双斜杠之前text()

//a[@id="lstCallsForService_ctrl0_lnkAddress"]//text()

为什么要双斜杠?这是因为实际上此a元素没有直接的文本节点子代:

<a id="lstCallsForService_ctrl0_lnkAddress" href="https://maps.google.com/?q=5100 CLEVELAND RD, Jacksonville, FL" target="_blank">
    <u>5100 CLEVELAND RD</u>
</a>

您还可以通过u标签访问文本

//a[@id="lstCallsForService_ctrl0_lnkAddress"]/u/text()

此外,将解决方案扩展为多个结果:

  • 遍历表行
  • 对于每一行,使用部分id属性匹配使用来找到单元格值contains()
  • 使用text_content()方法获取文本

执行:

for item in tree.xpath('//tr[@class="closedCall"]'):
    callSignal = item.xpath('.//span[contains(@id, "lblIncidentNbr")]')[0].text_content()
    dispatchTime = item.xpath('.//span[contains(@id, "lblDispatchTime")]')[0].text_content()
    location = item.xpath('.//a[contains(@id, "lnkAddress")]')[0].text_content()

    print 'Call Signal: ', callSignal
    print "Dispatch Time: ", dispatchTime
    print "Location: ", location
    print "------"

印刷:

Call Signal:  150318182333
Dispatch Time:  3-18 11:22
Location:  9600 APPLECROSS RD
------
Call Signal:  150318182263
Dispatch Time:  3-18 11:12
Location:  1100 E 1ST ST
------
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 lxml 和 xpath 解析

来自分类Dev

使用lxml`.xpath()`和`for`的意外输出

来自分类Dev

在 Python 中使用 XPath 和 ETXPath 的 LXML

来自分类Dev

使用python和lxml删除元素

来自分类Dev

Python使用lxml xpath从输入元素获取值

来自分类Dev

Xpath使用Scrapy刮取大小信息

来自分类Dev

Xpath使用Scrapy刮取大小信息

来自分类Dev

使用XPath和Scrapy / lxml排除特定的子节点

来自分类Dev

使用请求和lxml处理Xpath和提交Webforms

来自分类Dev

使用lxml和请求从XPath返回utf-8

来自分类Dev

如何使用硒刮取 json 元素?

来自分类Dev

选择使用xpath和Selenium的元素包含

来自分类Dev

使用BeautifulSoup和Python刮取多个页面

来自分类Dev

Python,如何使用lxml XPath?

来自分类Dev

用lxml / xpath解析html元素

来自分类Dev

通过LXML通过XPATH查找元素-Python

来自分类Dev

使用xpath查找具有某些特定文本的xml元素,或使用lxml在python中查找

来自分类Dev

XPath查询以刮取数据

来自分类Dev

使用xpath时遍历特定的lxml元素时获取属性的完整列表

来自分类Dev

xpath 到 dic python、lxml 和 xml

来自分类Dev

使用lxml和python查找子xml元素后如何获取父xml元素

来自分类Dev

使用lxml附加子元素

来自分类Dev

使用BeautifulSoup和熊猫保存和刮取多个页面

来自分类Dev

使用python和Beautifulsoup刮取imdb的投票和毛额

来自分类Dev

如何使用lxml和XPATH在单个查询中检索所有子节点

来自分类Dev

使用lxml和xpath抓取网站后出现数据类型问题

来自分类Dev

python使用lxml和xpath解析html表上的特定数据

来自分类Dev

使用 lxml 和 xpath 解析 python 中的选择性表行

来自分类Dev

使用 lxml 抓取数据时使用 xpath

Related 相关文章

热门标签

归档