设置向上
按照提交的示例here,我正在用scrapy抓住住房广告。
在我的情况下,我会关注住房广告页面的链接而不是作者页面,然后抓住住房广告页面以获取信息。
我的蜘蛛正确地从页面上的广告中抓取信息,并按照下一页的分页链接进行操作。
<小时/> 的问题
示例中只使用了一个启动网址,但我希望从大量网址“启动”,这些网址都位于一个页面上。为了获得这些网址,我改用了爬虫。
爬虫玩家获得网址,但是(看似)在跟随分页链接和抓取住房广告之间随机混合。
<小时/> 到目前为止的代码
class RoomsSpider(CrawlSpider):
name = 'rooms'
allowed_domains = ['spareroom.co.uk']
start_urls = ['https://www.spareroom.co.uk/flatshare/london']
# rules obtains the 'starting' urls
rules = [Rule(LinkExtractor(restrict_xpaths=(
'//*[@id="spareroom"]/div[2]/aside[2]/ul/li/a',
),),callback='parse_page')]
def parse_page(self, response):
# follow links to ad pages
for href in response.xpath(
'//*[@id="maincontent"]/ul/li/article/header[1]',
).css('a::attr(href)').extract():
yield scrapy.Request(response.urljoin(href),
callback=self.parse_ad)
# follow pagination links
next_page = response.xpath(
'//*[@id="maincontent"]/div[2]/ul[2]/li/strong/a/@href',
).extract_first()
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse_page)
def parse_ad(self, response):
# code extracting ad information follows here,
# finalising the code with a yield function.
理想情况下,根据起始网址,蜘蛛会跟随其广告链接,抓取其广告并跟随其分页链接,直到不再有分页链接。
也许我应该添加Rule
来获取分页链接,并删除# follow pagination links
部分?我不知道该怎么做。