蜘蛛没有跟随链接 - scrapy

时间:2017-12-09 13:05:40

标签: python scrapy web-crawler

我正在尝试构建一个蜘蛛,它在到达它所刮擦的页面之前会经过3页。我已经测试了shell中的响应,但是,它一起似乎不起作用,我不知道为什么。

我的代码如下:

# -*- coding: utf-8 -*-
import scrapy


class CollegiateSpider(scrapy.Spider):
    name = 'Collegiate'
    allowed_domains = ['collegiate-ac.com/uk-student-accommodation']
    start_urls = ['http://collegiate-ac.com/uk-student-accommodation/']

    # Step 1 - Get the area links

    def parse(self, response):
        for city in response.xpath('//*[@id="top"]/div[1]/div/div[1]/div/ul/li/a/text').extract():
            yield scrapy.Request(response.urljoin("/" + city), callback = self.parse_area_page)

    # Step 2 - Get the block links

    def parse_area_page(self, response):
        for url in response.xpath('//div[3]/div/div/div/a/@href').extract():
            yield scrapy.Request(response.urljoin(url), callback=self.parse_unitpage)

    # Step 3 Get the room links 

    def parse_unitpage(self, response):
        for url in response.xpath('//*[@id="subnav"]/div/div[2]/ul/li[5]/a/@href').extract():
            yield scrapy.Request(response.urljoin(final), callback=self.parse_final)

    # Step 4 - Scrape the data

    def parse_final(self, response):
        pass

我已尝试根据this answer更改为Crawlspider,但这似乎没有帮助。

我目前正在研究如何调试蜘蛛,然而,在这方面苦苦挣扎,所以认为在这里获取意见也是有益的。

1 个答案:

答案 0 :(得分:2)

您忘记了()

text()的{​​{1}}

但我使用'//*[@id="top"]/div[1]/div/div[1]/div/ul/li/a/text()'代替text()获取网址。

加入@href会产生错误的网址,因为urljoin('/' + city)会跳过/ - 您必须使用/uk-student-accommodation

urljoin(city)出现了问题 - 它阻止了大部分网址。

工作示例。您可以在没有项目的情况下运行它,并在allowed_domains

中保存最终的网址
output.csv