scrapy(使用selenium)爬取招聘数据(内附一万条招聘数据)-入门级

scrapy(使用selenium)爬取招聘网站(内附一万条招聘数据)-入门级

下一节介绍正常request携带cookie爬取并保存到数据库

本次介绍scrapy+selenium爬虫以及正常request爬虫,并且分别保存到sqlite数据库和mysql数据库

scrapy爬虫

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。

Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

scrapy(使用selenium)爬取招聘数据(内附一万条招聘数据)-入门级_第1张图片

在本次案例中,我们通过scrapy调用selenium进行爬虫

pip安装并且启动第一个项目

pip install Scrapy
scrapy startproject pinglun

自动生成如下结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FouOGy27-1668689368756)(C:/Users/86180/AppData/Roaming/Typora/typora-user-images/image-20221117203114617.png)]

其中大多数文件就是他的名字的功能,middlware就是中间件(爬虫过程),pipline就是管道(可以理解为数据从这儿流过),settings主要是全局的配置,items进行一些条件的限制(比如限制爬取字段),本次我们直接爬虫,就不做限制了

1、爬虫文件

自定义文件carhome.py,核心代码如下

import scrapy
from copy import deepcopy
import time
class CarhomeSpider(scrapy.Spider):
    num=1
    #cookie是浏览器的身份证,通过cookie对招聘官网进行反反爬虫
    cookies=" Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1648874337; __g=-; wt2=DWoUozbY57pwOIbymK4RzESIa5cnHAkMCG3lvevHp0gcQ4OqHMygNu3V_f8rIKNOusm7DKDVBnRLt0i3E5A-kIg~~; __l=l=%2Fwww.zhipin.com%2Fweb%2Fgeek%2Frecommend&s=3&friend_source=0; lastCity=100010000; __c=1648874338; __a=37977466.1648874338..1648874338.6.1.6.6; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1648874430; __zp_stoken__=b67adMTN2O0tzWXpEEH9KSSE7dWcteiA1TF03KAczH0o7PXk1IlBiRUxcezJNZA0NHiYJIiA%2FOi8vYSQEUmAHDgU0HEg2QzQvbgYMS3NoRntFQR1KAV1fDwkebwVHUHgWXB87ViBEUFhtXSU%3D"
    cookies = {i.split("=")[0]: i.split("=")[1] for i in cookies.split(";")}
    #下面属于scrapy自动生成的数据
    name = 'carhome'
    allowed_domains = ['zhipin.com/']
    base_html='https://www.xxxx.com'
    start_urls = ['https://www.xxxx.com/job_detail/?query=大数据开发工程师&city=100010000&industry=&position=']
    two_urls="https://www.xxxx.com/c100010000/?query={}&page={}"

    def parse(self,response):
        #搜索数据和数据页码的切换
        list= ["大数据开发工程师", "大数据工程师", "大数据讲师", "大数据运维工程师"]
        for i in list:
            for page in range(1,10):
                two_url = self.two_urls.format(i,page)
                time.sleep(0.2)
                #上面为页码对应的网页,对前十页进行网页申请,通过parse_two函数进行网页处理
                yield scrapy.Request(
                    url=two_url,
                    cookies=self.cookies,
                    dont_filter=True,
                    callback=self.parse_two
                )
    def parse_two(self,response):
        print("正在爬取网页: ")
        print(response)
        item={}
        #对数据列表进行定位
        uls=response.xpath("//div[@class='job-box']/div[@class='job-list']/ul/li")
        # 对数据进行定位,然后进行数据的储存
        for li in uls:

            item["name"]=li.xpath('.//span[@class="job-name"]/a/@title').extract()[0]
            item["salary"]=li.xpath('.//div[@class="job-limit clearfix"]/span/text()').extract()[0]
            item["detail"]=li.xpath('.//div[@class="job-title"]//a/@href').extract()[0]
            item["city"]=li.xpath('.//div[@class="job-title"]/span[@class="job-area-wrapper"]/span/text()').extract()[0]
            #跳转到详细页面
            time.sleep(0.2)
            yield scrapy.Request(
                url=self.base_html+item["detail"],
                cookies=self.cookies,
                dont_filter=True,
                meta={'item': deepcopy(item)},
                callback=self.parse_t
            )
    def parse_t(self,response):
        item = response.meta.get("item")
        item["detail_text"]=response.xpath(".//div[@class='job-sec']/div/text()").extract()
        print("爬取ing,第{}个页面".format(self.num))
        self.num+=1
        yield item

2、selenium配置

本次使用selenium进行爬虫,所以对中间件middlware进行修改,使用selenium为爬虫引擎

class CookiesMiddlewares(object):
    def __init__(self):
        print("初始化浏览器")
        self.driver = webdriver.Chrome()

    def process_request(self, request, spider):

        self.driver.get(request.url)
        time.sleep(4)
        # 我们等待5秒钟,让其加载
        source = self.driver.page_source
        # 获取页面的源码
        response = HtmlResponse(url=self.driver.current_url, body=source, request=request, encoding='utf-8')
        # Response 对象用来描述一个HTTP响应
        return response
        # 这样我们就获取到了所有的信息,并返回response

3、修改中间件

但是记得我们修改middleware,需要对settings进行修改中间件

DOWNLOADER_MIDDLEWARES = {
   'pinglun.middlewares.CookiesMiddlewares': 543,
}

这样我们就可以进行数据的爬取了

但是数据爬取之后,还需要保存数据

4、数据保存

pipline中增加如下内容

class PinglunPipeline:
    def process_item(self, item, spider):
        with open(r'xxx.csv', mode='a', encoding='utf-8') as f:
            file = f"{item['name']},{item['city'][0:2]},{item['salary']},{item['detail_text']}\n"
            f.write(file)
        return item

同样的,只要是对全局的影响,都需要再settings进行修改/增加,修改如下内容

ITEM_PIPELINES = {
   'pinglun.pipelines.PinglunPipeline': 300,
}

总结

这样本次爬虫就完成了,但是相对来说,各部分都是入门基础的,数据的保存也比较粗糙

学习就是这样,我们一开始有自己对知识应用的的一些理解,在学到别人指导后恍然大悟原来还能这样呀,所以,循序渐进,并且多尝试做到,再想如何做的更好,才能学好所学的内容

资料

本次整理了此前另一个爬虫爬取的一万四千条招聘数据的数据爬虫,需要的人链接自取
本文做过敏感处理,需要详情代码欢迎上述自取

你可能感兴趣的:(python,爬虫,python,爬虫,开发语言)