Hello!您能点开我的博客,我感到很荣幸,希望能对您有帮助。我是第一次写,如有不足之处,还请前辈多多指教。
以下是我写的一个爬虫小项目,爬取了智联招聘的一个网页里对于找工作的亲们比较感兴趣的几条信息,并把信息整理到了sqlite数据库里,

  • 创建一个爬虫文件,如zhilianspider.py
import scrapy
from CommmonSpider.items import CommmonSpiderItem
class ZhilianSpiderSpider(scrapy.Spider):# 爬虫名称,唯一name = 'zhilian_spider'# 允许访问的域allowed_domains = ['www.zhaopin.com']# 起始网址start_urls = ['https://jobs.zhaopin.com/447375014271949.htm']# 爬虫入口def parse(self, response):# 保证爬虫框架能够运行起来# print(response.text)# 通过Xpath提取字段# 提取响应路径为所有h1标签的文本内容(字符串形式)第一个job_title = response.xpath('//h1/text()').extract_first()# 提取响应路径为所有p标签的文本内容以字符串形式组成列表job_descriptor=response.xpath("//p/text()").extract()job_addr = response.xpath('//a[@href="http://www.zhaopin.com/lanzhou/"]/text()').extract_first()job_salary = response.xpath('//strong/text()').extract()[3]# 设置空字符串job_result=""# 遍历列表for job_str in job_descriptor:#拼接字符串job_result+=job_str# 解析工作详细信息页,将结果封装为指定的Item,# 送到piplines进一步存入数据库item=CommmonSpiderItem()item["job_title"] = job_titleitem["job_des"]=job_resultitem["job_addr"] = job_addritem["job_salary"] = job_salary# 将爬取到的数据返回到pipelines.py,存储到数据库yield item
  • 打开items.py文件
import scrapy
class CommmonSpiderItem(scrapy.Item):"""定义数据模型类,需要打开settings中的ITEM_PIPELINES 才能生效"""# 定义Item,继承scrapy.Item类,# 并将所有字段都定义为scrapy.Field类型job_des=scrapy.Field()job_title=scrapy.Field()job_salary=scrapy.Field()job_addr=scrapy.Field()
  • 打开 settings.py,使ITEM_PIPELINES 生效

  • 在settings.py中找到 ROBOTSTXT_OBEY ,将True改为 False。

  • 打开pipelines.py文件
#导入SQLite驱动
import sqlite3
# 数据装数据库
class CommmonspiderPipeline(object):"""处理spider解析过的item结果,可以存入数据库或文件,需要打开settings中的ITEM_PIPELINES 才能生效"""#  定义对象def __init__(self):# 连接到SQLite数据库,数据库文件是job.db# 如果文件不存在,会自动在当前目录创建self.conn=sqlite3.connect("job.db")#创建一个Cursor随机数据源self.cursor=self.conn.cursor()# 执行一条SQL语句,创建jobs表# self.cursor.execute("create table IF NOT EXISTS jobs(jobs text);")self.cursor.execute("create table jobs( job_des text, job_title text,job_salary text,job_addr text) ")# 提交数据self.conn.commit()def process_item(self, item, spider):  # 给jobs表添加字段(表格第一行的如工作、详情描述、地点、薪资等)jobs_insert = 'insert into jobs(job_des,job_title,job_salary,job_addr) values(?,?,?,?)'# 把item[]的值分别添加到对应的字段下边jobs_data = (item["job_des"], item["job_title"],item["job_salary"],item["job_addr"])# 执行上面两句命令self.cursor.execute(jobs_insert, jobs_data)# 提交数据self.conn.commit()
  • 打开middlewares.py文件,拉到最后
  • 注意:代码完成后打开 settings.py,使DOWNLOADER_MIDDLEWARES 生效
from selenium import webdriver
from selenium.webdriver.firefox.options import Options as FOptions
from selenium.common.exceptions import  TimeoutException
import time
from scrapy.http import HtmlResponse# 代理服务器
# 当引擎从调度器中取出request进行请求 发送给下载器之前
# 会先执行当前爬虫的中间件,在中间件中使用selenium
# 请求这个request,拿到动态网站的数据
# 然后将请求返回给spider爬虫对象
class SeleniumMiddleware(object):"""Selenium中间件,用来使用浏览器模拟下载请求,注意打开settings中的DOWNLOADER_MIDDLEWARES才能生效"""def __init__(self):# 初始化一个Firefox实例self.options=FOptions()# 设置无界面self.options.add_argument('-headless')self.browser=webdriver.Firefox(executable_path="D:/ruanjian\geckodriver\geckodriver",firefox_options=self.options)def process_request(self,request,spider):"""该方法在中间件被激活的时候系统自动调用,处理requset请求spider.name可以区分不同的爬虫:param request::param spider::return:"""try:# 获取请求的url网页链接内容self.browser.get(request.url)except TimeoutException as e:print('超时')# 休眠2秒time.sleep(2)# 请求的信息为获取的请求信息# 生成HtmlResponse,将浏览器模拟的下载结果返回给我们的spider,# 结果存在self.browser.page_source(原码)# 结果是整个页面的html代码return HtmlResponse(url=self.browser.current_url,body=self.browser.page_source,encoding="utf-8",request=request)
  • 如果想要随机更换User-Agent,打开middlewares.py文件,拉到最后
  • 注意:要去settings.py里使USER_AGENT失效,
    并在DOWNLOADER_MIDDLEWARES里面添加’CommmonSpider.middlewares.RandomUserAgentMiddleware’: 543,(数字可以更改)
#导入浏览器用户代理模块
from fake_useragent import UserAgent
#  随机更换User-Agent
class RandomUserAgentMiddleware(object):def __init__(self,crawler):# 子类RandomUserAgentMiddleware调用父类object的__init__()方法# 即用父类的初始化方法来初始化继承的属性super(RandomUserAgentMiddleware, self).__init__()#实例化浏览器用户代理模块类self.ua=UserAgent()# 随机获取浏览器类型self.random_ua=self.ua.random# 函数上面用上装饰符@classmethod,# 函数里有一个必写形式参数cls用来接收当前类名称# 定义这个方法,Scrapy会把当前的爬虫传递到方法里来@classmethod# 重载from_crawler方法def from_crawler(cls,crawler):# 将crawler返回给类return cls(crawler)  # 重载process_request方法def process_resquest(self,request,spider):# 将浏览器代理信息添加到Requests请求request.headers.setdefault('User-Agent',self.ua.random)
  • 最后打开Terminal 进入爬虫项目,运行命令行scrapy crawl zhilian_spider,得到下面数据库表

爬取智联招聘有用信息存入数据库相关推荐

  1. Python爬虫爬取智联招聘职位信息

    目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 #coding:utf-8 import urllib2 import re import xlwtclass ZLZ ...

  2. 【Python爬虫案例学习20】Python爬虫爬取智联招聘职位信息

    目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 ####基本环境配置: Python版本:2.7 开发工具:pycharm 系统:win10 ####相关模块: im ...

  3. selenium+PyQuery+chrome headless 爬取智联招聘求职信息

    最近导师让自己摸索摸索Python爬虫,好了就开始一发不可收拾的地步.正巧又碰到有位同学需要一些求职信息对求职信息进行数据分析,本着练练手的目的写了用Python爬取智联招聘网站的信息.这一爬取不得了 ...

  4. 爬虫练习二:爬取智联招聘职位信息

    1. 简介 因为想要找到一个数据分析的工作,能够了解到市面上现有的职位招聘信息也会对找工作有所帮助. 今天就来爬取一下智联招聘上数据分析师的招聘信息,并存入本地的MySQL. 2. 页面分析 2.1 ...

  5. python爬取智联招聘职位信息(单进程)

    我们先通过百度搜索智联招聘,进入智联招聘官网,一看,傻眼了,需要登录才能查看招聘信息 没办法,用账号登录进去,登录后的网页如下: 输入职位名称点击搜索,显示如下网页: 把这个URL:https://s ...

  6. java爬取智联招聘职位信息

    第一次写爬虫,案例比较简单,就在智联招聘网站上爬取职位信息. 技术点:IO流,集合,Jsoup使用,以及前端的知识 代码如下: package com.wty.utils;import java.io ...

  7. Python爬取智联招聘职位信息

    这是一次失败的尝试 , 事情是这样的-- 1.起因 前段时间刚刚学完爬虫,于是准备找个项目练练手.因为想要了解一下"数据挖掘"的职位招聘现状,所以我打算对'智联招聘'下手了.网上当 ...

  8. pythton爬取智联招聘职位信息

    前言 在智联招聘https://sou.zhaopin.com/时,发现无法直接去解析获得的html文本,它的数据是用js动态加载的,数据内容存储在json文件中,所以不能用以前的方法使用xpath. ...

  9. 智联招聘python岗位_Python爬虫爬取智联招聘职位信息

    import urllib2 import re import xlwt '''遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!''' cl ...

最新文章

  1. mac mysql log_mac如何开启mysql bin-log
  2. 大文件做分割处理的方法——winRAR压缩分割法
  3. DIV + CSS 神话
  4. 当root.sh与ORA-15031相遇
  5. qq空间说说服务器维护,如何解决QQ空间说说发表不了
  6. 前端学习(3205):对state的理解
  7. 8000字干货扫除你的焦虑!3点钟无眠区块链群聊最全精华
  8. 在Mac下配置Appium环境
  9. 使用jquery判断及改变checkbox选中状态
  10. MAC上使用gdb(Mac10.12未解决)
  11. php编写一个学生类_0063 PHP编程编写学生分数信息编辑和删除功能网页
  12. 在ARM+LINUX上使用pppd拔号上网(GPRS)流程
  13. navicat+for+mysql10.0.11简体中文破解版
  14. python安装reportlab
  15. 在 PyCharm 中使用 PyInstaller 打包 EXE 之过程简记
  16. 加性高斯白噪声信道的信道容量
  17. 网络空间地图测绘的战略意义(下)
  18. android 高德静态地图api,静态地图-API文档-开发指南-Web服务 API | 高德地图API
  19. STM32应用(七)JY901九轴姿态模块(串口DMA空闲中断和I2C通信)
  20. ������ʾ����

热门文章

  1. #今日论文推荐# 用GNN做CV三大任务的新骨干,同计算成本性能不输CNN、ViT与MLP|中科院华为诺亚开源
  2. vue的生命周期 (11个钩子函数)看了都能懂的
  3. PHP 文件处理常用操作
  4. 免费也可以很好玩,40款开源游戏任你玩(三)
  5. 记CentOS7一个百万PV商城的测试
  6. 【FFMPEG】AVERROR(EAGAIN)含义
  7. springboot反射执行private方法@Autowired字段为空
  8. jackson的readValue和convertValue方法
  9. 核心动画(2)寄宿图
  10. 计算机教案word格式模板,教案格式模板.doc