我试图刮这个网站https://www.pararius.com/english获得租赁信息。我想刮这个网站上的所有页面。
我在stackoverflow上查看过类似的问题,但似乎没有一个能反映我的问题。
我的代码中的所有东西都能正常工作,除了我想跟随“next_page”链接的部分。我已经用完全相同的概念为另一个图书网站编写了另一个蜘蛛,它工作得很完美。我无法将next_page链接加入到起始网址,并让scrapy自动抓取下一页。
下面是我的代码:
import scrapy
from time import sleep
class ParariusScraper(scrapy.Spider):
name = 'pararius'
start_urls = ['https://www.pararius.com/apartments/amsterdam/']
def parse(self, response):
base_url = 'https://www.pararius.com/apartments/amsterdam'
for section in response.css('section.listing-search-item'):
yield {
'Title': section.css('h2.listing-search-item__title > a::text').get().strip(),
'Location': section.css('div.listing-search-item__sub-title::text').get().strip(),
'Price': section.css('div.listing-search-item__price::text').get().strip(),
'Size': section.css('li.illustrated-features__item::text').get().strip(),
'Link':f"{base_url}{section.css('h2.listing-search-item__title a').attrib['href']}"
}
sleep(1)
next_page = response.css('li.pagination__item a').attrib['href'].split('/')[-1]
print(next_page)
if next_page:
yield response.follow(next_page, self.parse)
当我运行这段代码的时候,我疯狂地认为我的代码只抓取了第二页的结果,甚至没有抓取第一页,也就是我代码中看到的start_url。
我想知道我如何能解决这个问题,并有我的代码开始工作的预期。谢谢,我希望得到你的支持。
2条答案
按热度按时间zy1mlcev1#
以下代码的分页不会引发任何异常
uxh89sit2#
我使用下面的例子成功地让它工作起来。下一页的css选择器有一个问题,使用
response.urljoin()
进行相对链接比自己做所有的解析要容易得多。你还需要把下一页的请求放在for循环之外,否则你将为循环的每个迭代发送相同的请求。