0
点赞
收藏
分享

微信扫一扫

爬虫框架Scrapy实战之批量抓取招聘信息

李雨喵 2024-10-13 阅读 24

以下是使用爬虫框架 Scrapy 批量抓取招聘信息的实战步骤:


一、创建 Scrapy 项目


  1. 打开命令提示符或终端,执行以下命令创建一个 Scrapy 项目:


scrapy startproject recruitment_spider


  1. 进入项目目录:


cd recruitment_spider


二、定义数据结构(Item)


在项目的items.py文件中定义要抓取的招聘信息的数据结构:


import scrapy

class RecruitmentItem(scrapy.Item):
    job_title = scrapy.Field()
    company_name = scrapy.Field()
    location = scrapy.Field()
    salary = scrapy.Field()
    job_description = scrapy.Field()


三、编写爬虫(Spider)


  1. 在项目的spiders目录下创建一个新的 Python 文件,例如job_spider.py,并定义一个爬虫类:


import scrapy
from recruitment_spider.items import RecruitmentItem

class JobSpider(scrapy.Spider):
    name = "job_spider"
    start_urls = [
        "https://your-job-board-url.com",
    ]

    def parse(self, response):
        # 找到招聘信息列表的容器元素
        job_listings = response.css('.job-listing')

        for job in job_listings:
            item = RecruitmentItem()
            item['job_title'] = job.css('.job-title::text').get()
            item['company_name'] = job.css('.company-name::text').get()
            item['location'] = job.css('.location::text').get()
            item['salary'] = job.css('.salary::text').get()
            item['job_description'] = job.css('.job-description::text').get()
            yield item

        # 找到下一页的链接并继续爬取
        next_page = response.css('.next-page-link::attr(href)').get()
        if next_page is not None:
            yield response.follow(next_page, callback=self.parse)


在这个爬虫类中,我们首先定义了爬虫的名称和起始 URL。然后在parse方法中,我们使用 CSS 选择器找到招聘信息的容器元素,并提取每个招聘信息的各个字段。最后,如果有下一页的链接,我们继续跟随链接进行爬取。


四、设置和运行爬虫


  1. 在项目的settings.py文件中,可以进行一些设置,例如设置下载延迟、设置用户代理等,以避免被目标网站封禁:


# 设置下载延迟
DOWNLOAD_DELAY = 2

# 设置用户代理
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'


  1. 在命令提示符或终端中,运行爬虫:


scrapy crawl job_spider


Scrapy 将会开始抓取招聘信息,并将结果输出到控制台。你可以根据需要将抓取到的数据保存到文件或数据库中。


五、数据存储


  1. 可以使用 Scrapy 的管道(Pipeline)将抓取到的数据保存到文件或数据库中。在项目的pipelines.py文件中定义一个管道类:


import json

class JsonWriterPipeline(object):
    def open_spider(self, spider):
        self.file = open('jobs.json', 'w')

    def close_spider(self, spider):
        self.file.close()

    def process_item(self, item, spider):
        line = json.dumps(dict(item)) + "\n"
        self.file.write(line)
        return item


  1. settings.py文件中启用管道:


ITEM_PIPELINES = {
   'recruitment_spider.pipelines.JsonWriterPipeline': 300,
}


上述代码将抓取到的招聘信息保存为 JSON 格式的文件。你可以根据实际需求选择不同的存储方式,如保存到数据库或 CSV 文件中。

通过以上步骤,你可以使用 Scrapy 框架批量抓取招聘信息。根据目标网站的结构和需求,你可能需要调整 CSS 选择器和爬虫的逻辑。


举报

相关推荐

0 条评论