Scrapy.request没有获得新网址

时间:2016-12-14 10:19:18

标签: python scrapy

嗨我下面有这个scrapy代码(我删除了很多if循环并将其简化为易于理解)。 问题就是这种scrapy,只搜索网站的第一页。我发现hte scrapy.request没有得到新的url,并且在项目['url']中总是只附加基础URL并因此下载。

import scrapy 
from collections import Counter
from scrapy.selector import Selector
from Mycode.items import *

class ExampleSpider(scrapy.Spider):
     name = "full_sites"
     def __init__(self, site=None, *args, **kwargs):
         super(ExampleSpider, self).__init__(*args, **kwargs)
         self.start_urls = [site]
         self.base_url = site
         self._site = site
         self.allowed_domains = [self._site]

    def parse(self, response):
        for i in response.xpath('//a/@href').extract():
            print '================'
            print 'i entered=', i
            url = self.base_url + i
            print url, 'go to scrapy'
            yield scrapy.Request(url= url, callback=self.parse) 

            item = FullSitesItem()
            item['url'] = response.url
            print 'item=', item['url']
            yield item 

我在显示器上显示这些输出:

================
i entered= /service
http://webscraper.io/service go to scrapy
item= http://webscraper.io
================
i entered= /sitemap-specialist
http://webscraper.io/sitemap-specialist go to scrapy
item= http://webscraper.io
================
i entered= /screenshots
http://webscraper.io/screenshots go to scrapy
item= http://webscraper.io
================ 

所以不管传递给scrapy.Requests的url,项目['url']都是一样的!我该如何解决这个问题?

感谢

1 个答案:

答案 0 :(得分:1)

您正在循环i,因此response.url将始终返回相同的结果。

您可以按照以下方式保留parse方法:

def parse(self, response):
    for i in response.xpath('//a/@href').extract():
        print '================'
        print 'i entered=', i
        url = self.base_url + i
        print url, 'go to scrapy'
        yield scrapy.Request(url= url, callback=self.parse) 

这将处理主页面。

创建一个不同的解析方法来处理其他页面,并将callback=self.parse切换到新方法。