scrapy - scrapy - 来自以下页面的数据
问题描述
我有个问题。跳转到下一页后如何下载数据?它只从第一页下载。我粘贴,我的代码:
# -*- coding: utf-8 -*-
from scrapy import Spider
from scrapy.http import Request
class PronobelSpider(Spider):
name = 'pronobel'
allowed_domains = ['pronobel.pl']
start_urls = ['http://pronobel.pl/praca-opieka-niemcy/']
def parse(self, response):
jobs = response.xpath('//*[@class="offer offer-immediate"]')
for job in jobs:
title = job.xpath('.//*[@class="offer-title"]/text()').extract_first()
start_date = job.xpath('.//*[@class="offer-attr offer-departure"]/text()').extract_first()
place = job.xpath('.//*[@class="offer-attr offer-localization"]/text()').extract_first()
language = job.xpath('.//*[@class="offer-attr offer-salary"]/text()').extract()[1]
print title
print start_date
print place
print language
next_page_url = response.xpath('//*[@class="page-nav nav-next"]/a/@href').extract_first()
absolute_next_page_url = response.urljoin(next_page_url)
yield Request(absolute_next_page_url)
我只从第一页获取数据
解决方案
您的问题不在于抓取下一页,而在于您的选择器。首先,在按类选择元素时,推荐使用 css。发生的事情是offer-immediate
其他页面上没有该类的元素。
我对您的代码进行了一些更改,请参见下文:
from scrapy import Spider
from scrapy.http import Request
class PronobelSpider(Spider):
name = 'pronobel'
allowed_domains = ['pronobel.pl']
start_urls = ['http://pronobel.pl/praca-opieka-niemcy/']
def parse(self, response):
jobs = response.css('div.offers-list div.offer')
for job in jobs:
title = job.css('a.offer-title::text').extract_first()
start_date = job.css('div.offer-attr.offer-departure::text').extract_first()
place = job.css('div.offer-attr.offer-localization::text').extract_first()
language = job.css('div.offer-attr.offer-salary::text').extract()[1]
yield {'title': title,
'start_date': start_date,
'place': place,
'language': language,
'url': response.url}
next_page_url = response.css('li.page-nav.nav-next a::attr(href)').extract_first()
absolute_next_page_url = response.urljoin(next_page_url)
yield Request(absolute_next_page_url)
推荐阅读
- c++ - 没有从矢量存储和打印对象?
- java - Java 正则表达式返回最后一个字
- azure - Servic Fabric 是否适合简单的后台作业?
- angular - 找到合成属性@onMainContentChange。请在您的应用程序中包含“BrowserAnimationsModule”或“NoopAnimationsModule”
- python - 如何使用 DolphinDB Python API 上传 DATETIME 数据
- java - 将数组对象推送到 Array 或 ArrayList 并从 Android 中的另一个类访问它
- wpf - WPF - 为什么在运行时从相对路径加载图像会失败*除非*我在调试器中检查对象?
- reactjs - IdentityServer4 - 了解流和端点。它与 OAuth 和 OpenIDConnect 有什么关系?
- python - 用于查找特定 HTML 标记之外的模式的 Python 正则表达式
- python - 为什么 random.shuffle 在 numpy 列表上失败?