【问题标题】:Using Scrapy to retrieve nested data使用 Scrapy 检索嵌套数据
【发布时间】:2015-07-26 00:22:23
【问题描述】:

我正在使用 scrapy 尝试在嵌套类中检索 url 数据。我已经尝试按照教程和类似的问题进行操作,但我在看似简单的任务中做得很短。

我要抓取的页面是这个: http://www.leasingcar.dk/privatleasing

对于页面上的每一辆车,我都想获取指向“data-nice_url”文本的 xpath。因此,第一个结果应该是“/privatleasing/Citro%c3%abn-Berlingo/eHDi-90-Seduction-E6G”。但我每次都得到一个空数据集。我试过改变 xpath 没有任何外观。

我的代码如下所示:

from scrapy.spiders import Spider
from stack.items import StackItem
from scrapy.selector import Selector


class Spider(Spider):
name = "leasingcar"
allowed_domains = ["http://www.leasingcar.dk"]
start_urls = ["http://www.leasingcar.dk/privatleasing",]

def parse(self, response):

    hxs = Selector(response)
    print hxs.xpath('//div[@class="data-nice_url"]/text()').extract()

提前致谢

【问题讨论】:

    标签: python html xpath web-scraping scrapy


    【解决方案1】:

    页面非常“动态”,并使用多个 XHR 请求到不同的 API 端点来构建自身。在浏览器开发人员工具中查看这些请求后,我想说在 Scrapy 代码中模拟它们并不容易,使用浏览器自动化工具 selenium 解决问题会容易得多。您也可以使用"headless" PhantomJS browservirtual display

    在任何情况下,请确保您没有违反网站的使用条款并且您是good web-scraping citizen

    【讨论】:

    • 嗨!你介意帮忙吗? stackoverflow.com/questions/31630771/…
    • 感谢您的回答@alecxe。我已经尝试过查看 API,但是当我在发布请求中发送所需的 URL 时,我被拒绝访问。您能否详细说明为什么网站的动态会阻碍我实现目标?我可以在 html 中看到我想要的数据,所以我认为它们必须对 scrapy 可见?
    • @Frank 这就是重点,scrapy 不是浏览器,它只“看到”不包含所需数据的初始 HTML,它是通过附加请求和在浏览器中执行的 javascript 动态加载的。这就是为什么我建议采用高级方法并自动化一个真正的浏览器,它可以完成所有工作,构建页面,然后您将获取结果。
    • @alexce 我已经按照你的建议研究了硒。我可以让 webdriver 打开页面,但我仍然无法在块中找到我想要的属性。我已经下载了 firebug 和 firepath,但无法让 Xpath 访问我想要的数据。我试过: htmlElement = WebDriverWait(driver, 30).until(lambda driver: driver.find_element_by_xpath(//div[@class="car-thumb-item clickable vehicle " and contains(text(), privatleasing)]) ) 但它每次都返回任意数量的元素?
    • * 我只想要“data-nice_url”文本
    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 2013-03-08
    • 2018-12-15
    • 2017-01-29
    相关资源
    最近更新 更多