【问题标题】:Python Scrapy not always downloading data from websitePython Scrapy 并不总是从网站下载数据
【发布时间】:2013-11-29 15:55:39
【问题描述】:

Scrapy 用于解析 html 页面。我的问题是为什么有时scrapy会返回我想要的响应,但有时却不返回响应。是我的错吗?这是我的解析函数:

class AmazonSpider(BaseSpider):
    name = "amazon"
    allowed_domains = ["amazon.org"]
    start_urls = [
       "http://www.amazon.com/s?rh=n%3A283155%2Cp_n_feature_browse-bin%3A2656020011"
   ]

def parse(self, response):
            sel = Selector(response)
            sites = sel.xpath('//div[contains(@class, "result")]')
            items = []
            titles = {'titles': sites[0].xpath('//a[@class="title"]/text()').extract()}
            for title in titles['titles']:
                item = AmazonScrapyItem()
                item['title'] = title
                items.append(item)
            return items

【问题讨论】:

  • 您能否将未收到响应的运行日志消息包含在内?
  • 你好。你有任何关于它的新信息吗?我有类似的问题stackoverflow.com/questions/20723371/…
  • 我所做的是检查标题是否为空。如果韭菜是空的,请再次请求我从 respinse.url 获取的同一链接。相当愚蠢的解决方案,但它有效。
  • @Krasimir 您会考虑添加一个简短描述您选择的解决方案的回复吗?

标签: python request response scrapy sites


【解决方案1】:

我相信您只是没有使用最合适的 XPath 表达式。

Amazon 的 HTML 有点乱,不是很统一,因此不太容易解析。但经过一些实验后,我可以使用以下parse 函数提取两个搜索结果的所有 12 个标题:

def parse(self, response):
    sel = Selector(response)
    p = sel.xpath('//div[@class="data"]/h3/a')
    titles = p.xpath('span/text()').extract() + p.xpath('text()').extract()
    items = []
    for title in titles:
        item = AmazonScrapyItem()
        item['title'] = title
        items.append(item)
    return items

如果您关心结果的实际顺序,上面的代码可能不合适,但我相信情况并非如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多