python - 在 Scrapy 中抓取下一页
问题描述
我正在尝试从网站获取一些数据,但即使在正确的分页链接之后,我的蜘蛛也没有爬到下一页。
import scrapy
class NspiderSpider(scrapy.Spider):
name = "nspider"
allowed_domains = ["elimelechlab.yale.edu/"]
start_urls = ["https://elimelechlab.yale.edu/pub"]
def parse(self, response):
title = response.xpath(
'//*[@class="views-field views-field-title"]/span/text()'
).extract()
doi_link = response.xpath(
'//*[@class="views-field views-field-field-doi-link"]//a[1]/@href'
).extract()
yield {"paper_title": title, "doi_link": doi_link}
next_page = response.xpath(
'//*[@title="Go to next page"]/@href'
).extract_first() # extracting next page link
if next_page:
yield scrapy.Request(url=response.urljoin(next_page), callback=self.parse)
PS:我不想使用 LinkExtractor。任何帮助,将不胜感激。
解决方案
您的 next_page 逻辑没有问题,代码只是没有达到这一点,因为该项目的产量处于相同的标识级别。尝试以下方法:
import scrapy
class NspiderSpider(scrapy.Spider):
name = "nspider"
allowed_domains = ["elimelechlab.yale.edu"]
start_urls = ["https://elimelechlab.yale.edu/pub"]
def parse(self, response):
for view in response.css('div.views-row'):
yield {
'paper_title': view.css('div.views-field-title span.field-content::text').get(),
'doi_link': view.css('div.views-field-field-doi-link div.field-content a::attr(href)').get()
}
next_page = response.xpath(
'//*[@title="Go to next page"]/@href'
).extract_first() # extracting next page link
if next_page:
yield scrapy.Request(url=response.urljoin(next_page), callback=self.parse)
推荐阅读
- html - 如何使用 CSS 或 Bootstrap 为元素设置绝对边距?
- powershell - 在 Azure-Pipelines.yml 中使用 AzureFileCopy 任务输出
- swift - 使用 Codable 时的错误 - Swift
- vue.js - 如何让这个子组件在 vue.js 中使用视图路由器进行渲染?
- mysql - mysql按组限制记录加上内部连接多个表
- mysql - 如果组成员没有其他列值,则按列分组 MYSQL
- python - numpy.rint 可以返回 Int32 吗?
- python - 在 href 链接中将 URL 的变量从 Python 传递到 HTML
- kotlin - 实现泛型接口时避免单元参数声明
- gitlab - 子项目上的 gitlab 管道