无法创建能够满足特定条件的xpath

时间:2018-11-17 07:11:30

标签: python python-3.x xpath web-scraping

我创建了一个脚本,该脚本能够从网页中提取在类.html下可用的tableFile扩展名结尾的链接。该脚本可以完成任务。但是,我目前的目的是仅获取在类型字段中具有.html的{​​{1}}链接。我正在寻找任何纯xpath解决方案(不使用EX-或其他方式)。

Link to that site

到目前为止我尝试过的脚本:

.getparent()

当我尝试使用以下方法使满足以上条件的链接时,出现错误:

import requests
from lxml.html import fromstring

res = requests.get("https://www.sec.gov/Archives/edgar/data/1085596/000146970918000185/0001469709-18-000185-index.htm")
root = fromstring(res.text)

for item in root.xpath('//table[contains(@summary,"Document")]//td[@scope="row"]/a/@href'):
    if ".htm" in item:
        print(item)

我得到的错误:

for item in root.xpath('//table[contains(@summary,"Document")]//td[@scope="row"]/a/@href'):
    if ".htm" in item and "EX" in item.xpath("..//following-sibling::td/text"):
        print(item)

这是文件的外观:

enter image description here

3 个答案:

答案 0 :(得分:2)

如果您需要纯XPath解决方案,则可以在下面使用:

<input type="radio" class='rd'name="all" value="op1" checked="">All
<input type="radio" name="selected" class='rd' value="op2"> Selected
<input type="checkbox" name="item" >Item description

答案 1 :(得分:1)

这是一种使用数据框和熊猫的方法

import pandas as pd
tables = pd.read_html("https://www.sec.gov/Archives/edgar/data/1085596/000146970918000185/0001469709-18-000185-index.htm")
base = "https://www.sec.gov/Archives/edgar/data/1085596/000146970918000185/"
results = [base + row[1][2] for row in tables[0].iterrows() if row[1][2].endswith(('.htm', '.txt')) and str(row[1][3]).startswith('EX')]
print(results)

答案 2 :(得分:1)

看起来像你想要的

//td[following-sibling::td[starts-with(text(), "EX")]]/a[contains(@href, ".htm")]

使用xpath可以有很多不同的方法。 CSS更加简单。