Scrapy“下一页”实施错误

时间:2018-04-03 16:15:56

标签: scrapy

我的目标:

  1. 废弃start_url上的所有产品链接
  2. 将产品链接发送至parse_items,废弃产品详细信息,另存为json
  3. 从start_url
  4. 中查找下一页链接
  5. 重复并冲洗,直到目录末尾
  6. Process

    到目前为止,我已经尝试了两种方法,但都没有效果。有人能指出我正确的方向吗?

    (1)使用LinkExtractor获取所有项链接,可能是错误:排除下一个链接,因此没有next_page_url

    class urllink(CrawlSpider):
            name = "urllink"
    
            allowed_domains = ['url.com'] 
    
            start_urls = [
                'http://www.url.com/',
                ]
    
            rules = [
                Rule(
                    LinkExtractor(
                        allow = ('items/detail/-/id='),
                        deny = (),
                        canonicalize=True,
                        unique=True
                    ),
                    follow=False,
                    callback="parse_items"
                )
            ]
    
            def parse_items(self, response):
    
                yield {
                    'title':response.css("cite::text").extract_first(),
                        }
    
                next_page_url = response.css('.next a::attr(href)').extract_first()
                if next_page_url is not None:
                    yield scrapy.Request(response.urljoin(next_page_url))
    

    (2)在主页面废料中调用next_page_url,将项目链接发送到项目废料。但有些事情是错的,不知道在哪里。

    class urlcom(CrawlSpider):
        name = "urlcom3"
    
        allowed_domains = ['url.com'] 
    
        start_urls = [
            'http://www.url.com',
            ]
    
        def parse_links(self, response):
            links = response.css('ul[class = "cmn-list-product01"] a::attr(href)').extract()
            for link in links:
                print(link)
                scrapy.Request(link, call_back = "parse_items")
    
            next_page_url = response.css('.next a::attr(href)').extract_first()
            if next_page_url is not None:
                yield scrapy.Request(response.urljoin(next_page_url))
    
        def parse_items(self, content):
    
            yield {
                'title':content.css("cite::text").extract_first(),
                    }
    

1 个答案:

答案 0 :(得分:0)

我自己终于解决了这个问题,结果却是小错误。如果有人遇到类似的问题,这就是我犯的错误。

我选择了第二个代码作为基础。

1)Scrapy的第一只蜘蛛必须命名为#34;解析"

  

def解析(自我,回应):

2)使用yield和callback将链接传递给第二项蜘蛛

  

yield scrapy.Request(link,callback = self.parse_items)

希望这会有所帮助。