招聘网站代码模板 mysql_招聘网站爬虫模板

招聘网站爬虫模板

项目的创建

项目的设置

中间件的理解与使用

selenium的基本使用

爬虫项目的创建:

scrapy startproject spiderName

cd spiderName

scrapy genspider name www.xxx.com

项目的设置:

settings的基础设置:

USER_AGENT='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

ROBOTSTXT_OBEY = False#关闭协议

LOG_LEVEL = 'ERROR'#日志输出最低等级

DOWNLOADER_MIDDLEWARES = {#开启下载器中间件

# 'TZemployment.middlewares.TzemploymentDownloaderMiddleware': 543,

'TZemployment.middlewares.自定义中间件名字': 543,

}

ITEM_PIPELINES = {#开启item

'TZemployment.pipelines.TzemploymentPipeline': 300,

}

中间件的理解与使用:

虽然中间件网上的示意图都烂大街了,我还是想贴一下;

21b9fb4232c1768e5647bb1c16c5547f.png

中间件分为下载器中间件与爬虫中间件,我们常说的中间件为下载器中间件;

定义(官方解释):

​下载器中间件是位于引擎和下载器之间的特定挂钩,它们在从引擎传递到下载器时处理请求,以及从下载器传递到引擎的响应。

如果需要执行以下操作之一,请使用Downloader中间件:

在将请求发送到下载器之前处理请求(即,在Scrapy将请求发送到网站之前);

在将接收到的响应传递给蜘蛛之前,先对其进行更改;

发送新的请求,而不是将收到的响应传递给蜘蛛;

将响应传递给蜘蛛,而无需获取网页;

默默地丢弃一些请求。

说人话就是:所有的请求与响应都会经过它,我们可以截取并修改成我们需要的形式或功能;

下载器中间件的好处:

可以集成Selenium、重试和处理请求异常等

我们就是用到了Selenium在中间件中对接scrapy;

selenium在中间件中的使用:

selenium的基本语法:

894144b2afc9d646fb5b4e01e5377704.png

通过selenium中的page_source获取网页源码,发送至spider下的parse进行xpath解析。

# -*- coding: utf-8 -*-

from scrapy import signals

from scrapy.http import HtmlResponse

import time

#设置selenium的中间件

class SelemiumSpiderMiddleware(object):

#对发送的

def process_request(self,request,spider):

#通过spider调用spider下的driver属性

spider.driver.get(request.url)

time.sleep(1)

page_text = spider.driver.page_source

return HtmlResponse(url=request.url,body=page_text,request=request,encoding='utf-8')

存储部分:(pipelines模块)

该存储功能如下,代码暂时不开放;

调用外部文件,自动建库建表,对MySQL中的数据进行检测是否重复;

主函数spider配置:

# -*- coding: utf-8 -*-

import scrapy

from selenium import webdriver

#from .. import items

from TZtalent.items import TztalentItem

#from 主项目名.items import items中的类

class TzcodeSpider(scrapy.Spider):

#泰州就业人才网

name = 'tzcode'

# allowed_domains = ['www.xxx.com']

#不需要动,改相应的配置信息即可

#传参

def __init__(self,table_name,keyword,webhook,*args,**kwargs):

super(TzcodeSpider, self).__init__(*args, **kwargs)

# path = r"C:\Users\Administrator\Desktop\phantomjs-1.9.2-windows\phantomjs.exe"

# self.driver = webdriver.PhantomJS(executable_path=path)

#防止selenium识别

options = webdriver.ChromeOptions()

options.add_experimental_option("excludeSwitches", ["enable-automation"])

options.add_experimental_option('useAutomationExtension', False)

self.driver = webdriver.Chrome(options=options)

self.driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {

"source": """

Object.defineProperty(navigator, 'webdriver', {

get: () => undefined

})

"""

})

# self.driver = webdriver.Chrome()

##灵活变动,有的网站统一是gb2312编码,需要将URL进行转换--urlencode编码

#self.keyword = quote(keyword.encode("gb2312"))

self.keyword = keyword

self.webhook_url = webhook

self.table_name = table_name

self.start_urls =[f"-----------url------{self.keyword}"]

#解析selenium发过来的response数据

def parse(self, response):

# print(response.url)

#父标签---所需要信息标签上的父标签

div_list = response.xpath("父标签xpath语法")

item = TzemploymentItem()

for div in div_list:

item['title'] = div.xpath("./匹配的title信息xpath").extract_first()

#判断title是否为空

if item['title'] == None:

break

item['company_name'] = div.xpath("./匹配的company_name信息xpath").extract_first()

item['company_url'] = div.xpath("./匹配的company_url信息xpath").extract_first()

item['site'] = div.xpath('./匹配的site信息xpath').extract_first()

yield items

#

def __del__(self):

#退出驱动并关闭所有关联的窗口

self.driver.quit()

传参并启动爬虫:

#spider中url与xpath配置完成后,进行参数设置

from scrapy import cmdline

cmdline.execute("scrapy crawl tzcode -a table_name=表名 -a keyword=java -a webhook=".split())

适用范围:

网站反爬不强的地方网站;

51job、拉钩等可使用。

注:

仅用于技术交流学习,不承担任何责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值