scrapy中为什么不能进入第二层爬取?



 from scrapy.spider import BaseSpider
from scrapy.selector import Selector
from scrapy.utils.response import get_base_url
from scrapy.utils.url import urljoin_rfc
from scrapy.http import Request,FormRequest
from SCR.items import ScrItem
class ScrSpider(BaseSpider):
    name = "scr"
    allowed_domains = ["http://pubs.rsc.org"]

    def start_requests(self):
        return [FormRequest("http://pubs.rsc.org/en/search/journalresult",
                           formdata={'k1': 'v1', 'k2': 
                           'v2','k3':'v3','k4':'v4'},
                               callback=self.parse)]

    def parse2(self,response):
        print 'The second step'


    def parse(self, response):
        sel = Selector(response)
        base_url=get_base_url(response)
        sites = sel.xpath(u'//h2[@class="title_text_s4_jrnls"]')
        for site in sites:
            urls=site.xpath('a/@href').extract()

        links=[]   
        links =  [urljoin_rfc(base_url,link) for link in urls]

        for link in links:
            print 'The first step'
            yield Request(link,callback=self.parse2)

输出: The first step

但,没有输出 The second step

请教什么原因?

..............解决分割线.................
allowed_domains = [" http://pubs.rsc.org "]

应该是:allowed_domains = ["pubs.rsc.org"]

就是进不到第二层的原因

scrapy python-爬虫

-July- 9 years, 8 months ago

比较好的方法应该使用 scrapy 的 log 功能。
在命令行里找The second step这句的话太难了。
其实也可以把需要调试的变量写入文件。
本来想运行一下你的这个爬虫,不过哪个网址貌似被墙@_@。
所以你可以把 links 这个列表 log 一下,看看列表是不是空的。

leonana answered 9 years, 8 months ago

Your Answer