招聘网站爬虫模板
招聘网站爬虫模板
- 项目的创建
- 项目的设置
- 中间件的理解与使用
- 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, }
中间件的理解与使用:
虽然中间件网上的示意图都烂大街了,我还是想贴一下;
中间件分为下载器中间件与爬虫中间件,我们常说的中间件为下载器中间件;
定义(官方解释):
下载器中间件是位于引擎和下载器之间的特定挂钩,它们在从引擎传递到下载器时处理请求,以及从下载器传递到引擎的响应。
如果需要执行以下操作之一,请使用Downloader中间件:
- 在将请求发送到下载器之前处理请求(即,在Scrapy将请求发送到网站之前);
- 在将接收到的响应传递给蜘蛛之前,先对其进行更改;
- 发送新的请求,而不是将收到的响应传递给蜘蛛;
- 将响应传递给蜘蛛,而无需获取网页;
- 默默地丢弃一些请求。
说人话就是:所有的请求与响应都会经过它,我们可以截取并修改成我们需要的形式或功能;
下载器中间件的好处:
- 可以集成Selenium、重试和处理请求异常等
- 我们就是用到了Selenium在中间件中对接scrapy;
selenium在中间件中的使用:
selenium的基本语法:
推荐该网站:http://www.testclass.net/selenium_python
通过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())
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略