【问题标题】:my xpath is good, but i've got nothing with scrapy我的 xpath 很好,但我对 scrapy 没有任何帮助
【发布时间】:2015-12-21 10:30:50
【问题描述】:

我尝试用scrapy 删除一页。我找到了带有 FireXpath(一个 firefox 插件)的 xpath,它看起来不错。但是使用 Scrapy,我没有得到任何结果。

我的 python 程序如下所示:

#!/usr/bin/python -tt
# -*- coding: utf-8 -*-

from scrapy.selector import Selector
from scrapy.contrib.spiders import CrawlSpider
from datetime import datetime
from scrapy.spider import BaseSpider

class robtex(BaseSpider):
    # Crawling Start
    CrawlSpider.started_on = datetime.now()
    # CrawlSpider
    name = 'robtex'

    DOWNLOAD_DELAY = 3
    start_urls = [ "https://www.whois.com/en/advisory/dns/com/stackoverflow/whois.html"]


    def parse(self, response):
        # Selector
        sel = Selector(response)
        print sel.xpath(".//*[@id='datawhois']/div[2]/table[3]/tbody/tr[3]/td[2]/a/text()").extract()

如何解决?

提前致谢。

【问题讨论】:

    标签: python xpath web-scraping scrapy scrapy-spider


    【解决方案1】:

    您只需从 XPath 表达式中删除 tbody

    .//*[@id='datawhois']/div[2]/table[3]/tr[3]/td[2]/a/text()
    

    演示:

    $ scrapy shell https://www.robtex.com/en/advisory/dns/com/stackoverflow/whois.html
    In [1]: response.xpath(".//*[@id='datawhois']/div[2]/table[3]/tbody/tr[3]/td[2]/a/text()").extract()
    Out[1]: []
    
    In [2]: response.xpath(".//*[@id='datawhois']/div[2]/table[3]/tr[3]/td[2]/a/text()").extract()
    Out[2]: [u'STACKOVERFLOW.COM']
    

    【讨论】:

    • 我遇到了类似的问题,想明白,为什么删除 tbody 让它工作?
    • @RicardoSilva tbody 以及 thead 和其他东西是浏览器通常会插入的东西..scrapy 不是浏览器..
    • 有什么方法可以识别出 和 是否真的存在于代码中?还是唯一的方法是反复试验?
    • @RicardoSilva 您不必像在本主题中那样使用 xpath 表达式 - 实际上,这些表达式通常不太可靠。只需跳过 tbody 或 theads..例如://table[@id="myid"]//tr 将匹配所有行..希望您明白这一点。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签