【问题标题】:Why does my Scrapy code return an empty array?为什么我的 Scrapy 代码返回一个空数组?
【发布时间】:2015-07-02 17:33:08
【问题描述】:

我正在为 wunderground.com 构建一个网络爬虫,但我的代码返回了英寸雨量和湿度的“[]”值。谁能明白为什么会这样?

# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import Selector
import time

from wunderground_scraper.items import WundergroundScraperItem


class WundergroundComSpider(scrapy.Spider):
    name = "wunderground"
    allowed_domains = ["www.wunderground.com"]
    start_urls = (
        'http://www.wunderground.com/q/zmw:10001.5.99999',
    )

    def parse(self, response):
        info_set = Selector(response).xpath('//div[@id="current"]')
        list = []
        for i in info_set:
            item = WundergroundScraperItem()
            item['description'] = i.xpath('div/div/div/div/span/text()').extract()
            item['description'] = item['description'][0]
            item['humidity'] = i.xpath('div/table/tbody/tr/td/span/span/text()').extract()
            item['inches_rain'] = i.xpath('div/table/tbody/tr/td/span/span/text()').extract()
            list.append(item)
        return list

我也知道湿度和英寸雨量项设置为相同的 xpath,但这应该是正确的,因为一旦信息在数组中,我只需将它们设置为数组中的某些值。

【问题讨论】:

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


    【解决方案1】:

    让我建议一个更可靠和可读的 XPath 来定位,例如,以“湿度”列标签为基础的“湿度”值:

    "".join(i.xpath('.//td[dfn="Humidity"]/following-sibling::td//text()').extract()).strip()
    

    现在输出 45%。


    仅供参考,您的 XPath 至少有一个问题 - tbody 标记 - 从 XPath 表达式中删除它。

    【讨论】:

    • 我在这个话题上仍然有问题,你能不能给我指出一个关于你不同的 XPath 语法的来源?或者去掉tbody标签的原因。
    • @Ineedsteamhelp 当然,tbody 是不需要的,因为它是由浏览器添加的,在你在 Scrapy 中获得的 HTML 中不会有 tbody。
    • 那么有什么方法可以查看 Scrapy 获取的确切 HTML,还是我需要了解更多有关 HTML 的信息才能知道浏览器添加了什么?
    • 同理,你怎么知道浏览器添加了哪些标签?
    • 抱歉所有问题,但您能否指出一些有关使 XPath 更具可读性的文档(例如您在原始答案中建议的 XPath),因为我真的不知道如何您从 HTML 设计了 ​​XPath。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2022-01-09
    • 2015-05-25
    • 1970-01-01
    • 2017-01-14
    • 2017-06-19
    • 2012-08-26
    相关资源
    最近更新 更多