python - Scrapy 不抓取任何页面
问题描述
我正在爬网站https://oa.mo.gov/personnel/classification-specifications/all。我需要进入每个职位页面,然后提取一些信息。我想我可以使用 LinkExtractor 或使用 xPath 查找所有 URL 来做到这一点,这就是我在下面尝试的。蜘蛛不会显示任何错误,但也不会抓取任何页面:
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from StateOfMoJDs.items import StateOfMoJDs
class StateOfMoJDs(scrapy.Spider):
name = 'StateOfMoJDs'
allowed_domains = ['oa.mo.gov']
start_urls = ['https://oa.mo.gov/personnel/classification-specifications/all']
def parse(self, response):
for url in response.xpath('//span[@class="field-content"]/a/@href').extract():
url2 = 'https://oa.mo.gov' + url
scrapy.Request(url2, callback=self.parse_job)
def parse_job(self, response):
item = StateOfMoJDs()
item["url"] = response.url
item["jobtitle"] = response.xpath('//span[@class="page-title"]/text()').extract()
item["salaryrange"] = response.xpath('//*[@id="class-spec-compact"]/div/div[1]/div[2]/div[1]/div[2]/div/text()').extract()
item["classnumber"] = response.xpath('//*[@id="class-spec-compact"]/div/div[1]/div[1]/div[1]/div/div[2]/div//text()').extract()
item["paygrade"] = response.xpath('//*[@id="class-spec-compact"]/div/div[1]/div[3]/div/div[2]/div//text()').extract()
item["definition"] = response.xpath('//*[@id="class-spec-compact"]/div/div[2]/div[1]/div[2]/div/p//text()').extract()
item["jobduties"] = response.xpath('//*[@id="class-spec-compact"]/div/div[2]/div[2]/div[2]/div/div//text()').extract()
item["basicqual"] = response.xpath('//*[@id="class-spec-compact"]/div/div[3]/div[1]/div/div//text()').extract()
item["specialqual"] = response.xpath('//*[@id="class-spec-compact"]/div/div[3]/div[2]/div[2]/div//text()').extract()
item["keyskills"] = response.xpath('//*[@id="class-spec-compact"]/div/div[4]/div/div[2]/div/div//text()').extract()
yield item
使用 scrapy shell 时,会response.xpath('//span[@class="field-content"]/a/@href').extract()
生成一个以逗号分隔的相对 URL 列表:
['/personnel/classification-specifications/3005', '/personnel/classification-specifications/3006', '/personnel/classification-specifications/3007', ...]
解决方案
在您的parse()
方法中,您需要满足yield
您的要求:
yield scrapy.Request(url2, callback=self.parse_job)
推荐阅读
- mfc - MFC 中的虚拟组合框
- swift - 如何修复 Swift 对双打的不准确调试描述?
- vba - 我怎样才能为按键事件制作一个子?
- javascript - 来自用户 Angular 的嵌套数据
- python - func中的Python局部变量
- android - Playstore:此应用可能未针对您的设备进行优化
- objective-c - 班级级别的@objc 不起作用。必须手动将所有属性标记为 @objc 才能在目标 c 类中使用
- phpmailer - 在检查是否已连接时捕获到 EOF
- sql - SQL 查询:如果满足搜索条件,则应返回单条记录,否则返回多条记录
- asynchronous - 如何在面积图中实现异步向下钻取。下面是我的代码