【问题标题】:Whenever I change function parse scrapy doesn't work or crawl?每当我更改函数解析时,scrapy 不起作用或爬行?
【发布时间】:2015-04-17 10:41:45
【问题描述】:

如果我不更改函数解析,这段代码工作得非常好。然后如果我想抓取网站上的所有内容,那么它会停止工作并且不返回任何查询。帮助我编写抓取规则。

import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.selector import Selector
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from urlparse import urljoin


class CompItem(scrapy.Item):
    title = scrapy.Field()
    link = scrapy.Field()
    data = scrapy.Field()
    name = scrapy.Field()
    date = scrapy.Field()



class criticspider(CrawlSpider):
    name = "mmt"
    allowed_domains = ["consumercomplaints.in"]
    start_urls = ["http://www.consumercomplaints.in/?search=make-my-trip"]
    rules = (
        Rule(
            SgmlLinkExtractor(allow=("search=make-my-trip&page=1/+",)),
            callback="parse_items",
            follow=True),
    )


    def parse_items(self, response):
        sites = response.xpath('//table[@width="100%"]')
        items = []

        for site in sites:
            item = CompItem()

            item['name'] = site.xpath('.//td[@class="small"]//a/text()').extract()[0]
            item['date'] = site.xpath('.//td[@class="small"]/text()').extract()[1]
            item['title'] = site.xpath('.//td[@class="complaint"]/a/span/text()').extract()[0]
            item['link'] = site.xpath('.//td[@class="complaint"]/a/@href').extract()[0]
            if item['link']:
                if 'http://' not in item['link']:
                    item['link'] = urljoin(response.url, item['link'])
                yield scrapy.Request(item['link'],
                                    meta={'item': item},
                                    callback=self.anchor_page)

            items.append(item)

    def anchor_page(self, response):
        old_item = response.request.meta['item']

        old_item['data'] = response.xpath('.//td[@class="compl-text"]/div/text()').extract()
        yield old_item

【问题讨论】:

  • 为另一个单行回调提供此请求是一个奇怪的想法。它的作用不大。只需修改 if 语句中的项目并生成它
  • @Marek 没有得到你
  • 我误读了代码。忽略我之前的评论。我已经更正了答案
  • 这是什么意思:“如果我不改变函数解析”
  • @StevenAlmeroth 如果我们在使用爬虫时使用 def 解析,它将覆盖它

标签: python web-scraping web-crawler scrapy screen-scraping


【解决方案1】:

你需要从parse_itemsreturn items

【讨论】:

  • 对于 Page=1,如果我更改 def parse 它工作得非常好,以便抓取网站上的所有页面,而不是如果我将 def parse 更改为 parse_items 或其他内容则它不起作用
  • 我的代码仍然无法正常工作你试过了吗?
  • 不,我没有运行它。我去了关于它的scrapy docs。
  • 感谢您的帮助,但这不是我认为的问题
  • 最后一条评论,parse 方法也有问题。不过,我没有在那个项目中使用(或定义)规则。发生的事情是我必须在蜘蛛中存在parse 方法,即使它是空的(方法),因为我使用了其他回调,就像你现在尝试做的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 2017-03-15
  • 2015-02-19
  • 1970-01-01
相关资源
最近更新 更多