gpt4 book ai didi

python - Scrapy:有人能告诉我为什么这段代码不允许我抓取后续页面吗?

转载 作者:行者123 更新时间:2023-12-05 08:04:52 25 4
gpt4 key购买 nike

我是一名初学者,正在学习如何在 Python 中使用 Scrapy 进行网络抓取。有人可以指出什么是错的吗?我的目标是抓取所有后续页面。

from indeed.items import IndeedItem
import scrapy

class IndeedSpider(scrapy.Spider):
name = "ind"
allowed_domains = ["https://www.indeed.com"]
start_urls = ['https://www.indeed.com/jobs?q=analytics+intern&start=']

def parse(self, response):
job_card = response.css('.jobsearch-SerpJobCard')
for job in job_card:
item = IndeedItem()

job_title = job.css('.jobtitle::attr(title)').extract()
company_name = job.css('.company .turnstileLink::text').extract()
if not company_name:
company_name = job.css('span.company::text').extract()

item['job_title'] = job_title
item['company_name'] = company_name
yield item

next_page_extension = response.css('ul.pagination-list a::attr(href)').get()
if next_page_extension is not None:
next_page = response.urljoin(next_page_extension)
yield scrapy.Request(next_page, callback=self.parse)

最佳答案

您的代码总体上看起来不错,但我可以看到两个问题:

1 - allowed_domains 属性要求我们只提供域,而不是完整的 URL。按原样运行它,您可能会在日志中看到类似这样的内容:

2021-04-28 21:10:55 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'www.indeed.com': <GET https://www.indeed.com/jobs?q=analytics+intern&start=10>

这意味着 Scrapy 忽略了该请求,因为它不符合允许的域。要解决这个问题,只需使用:

allowed_domains = ["indeed.com"]

( more about it )

2 - 您用于分页的选择器将始终匹配分页小部件的第一个链接。您可以尝试使用 .getall() 代替,或者将 anchor 标记为“Next”。例如:

next_page_extension = response.css(
'ul.pagination-list a[aria-label=Next]::attr(href)'
).get()

关于python - Scrapy:有人能告诉我为什么这段代码不允许我抓取后续页面吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67248938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com