【问题标题】:Can't iterate through XPathSelectorList无法遍历 XPathSelectorList
【发布时间】:2014-06-27 18:13:15
【问题描述】:

我在下面构建了一个简单的网络爬虫:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector


class ITTester(BaseSpider):
    name = 'ITTester'
    allowed_domains = ["sec.gov"]
    start_urls = ['http://www.sec.gov/Archives/edgar/data/320193/000112760212034445/xslF345X03/form4.xml']

    def parse(self, response):
    hxs = HtmlXPathSelector(response)
    sites = hxs.select("/html/body/table[3]/tbody/tr")
    print len(sites)
    for site in sites:
        HHH = site.select("/td[1]/span[1]/text()").extract()
        print HHH

我转到this site,我想抓取并打印“Common Stock”的每个实例(即“Common Stock”的 2 倍)。

我已经用hxs.select("/html/body/table[3]/tbody/tr") 标识了表格的行,当打印返回的XPathSelectorList 的长度时,它会打印2,但是for loop 中的打印会返回2 个空白括号[]。我已经使用 Firebug 来获取 XPath,我检查了 tbody 确实在源代码中。

对我做错了什么有任何想法吗?

【问题讨论】:

    标签: python xpath scrapy firebug


    【解决方案1】:

    在内部选择中使用相对路径,所以 site.select("td[1]/span[1]/text()").extract() 而不是你所拥有的。

    【讨论】:

    • 谢谢!它就像一个魅力。你能详细说明有/之前有什么区别吗?
    • 任何以/ 开头的路径都从文档节点向下选择,因此/td[1] 选择文档节点的第一个td 子元素。您想要 site 节点的第一个 td 子节点,因此您需要使用相对路径。
    • 谢谢!希望我对 Xpath 有更好的了解 :)
    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2019-08-08
    • 2018-11-23
    相关资源
    最近更新 更多