python爬虫: 爬取boss网站数据 保存到mysql

news/2024/5/20 12:29:05/文章来源:https://blog.csdn.net/qq_36606793/article/details/115765284

爬取boss数据并保存到mysql
boss的反爬虫控制尤其恶心 cookies大概用3次左右就不能用了
所以爬取不了太多东西 只可用来学习
等学习完逆向爬虫课程 再来挑战挑战
爬虫目录结构
example.py

import scrapy
from bs4 import BeautifulSoup
from boos_scrapy.items import BoosScrapyItem
from time import sleepclass ExampleSpider(scrapy.Spider):name = 'example'# allowed_domains = ['example.com']start_urls = ['https://www.zhipin.com/c101280100/?query=%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88&page=1&ka=page-1']url = "https://www.zhipin.com/c101280100/?query=%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88&page={0}&ka=page-{1}"page_num = 2def parse(self, response):li_list = response.xpath('//*[@class="job-list"]/ul/li')for li in li_list:job_tags = li.xpath('.//div/div[2]/div[2]/text()').extract_first()#福利待遇title = li.xpath('.//div/div[1]/div[1]/div/div[1]/span[1]/a/text()').extract_first()#招聘职位salary = li.xpath('.//div/div[1]/div[1]/div/div[2]/span/text()').extract_first() #薪资待遇particulars = li.xpath('.//div[1]/div[1]/div/div[1]/span[1]/a/@href').extract_first() #详情地址boos_url = "https://www.zhipin.com" + particulars item = BoosScrapyItem()item['job_tags'] = job_tagsitem['title'] = titleitem['salary'] = salary#回调函数yield scrapy.Request(boos_url,callback=self.parse_detail,meta={'item':item})if self.page_num <= 3:new_url = format(self.url%(self.page_num,self.page_num))self.page_num+=1yield scrapy.Request(new_url,callback=self.parse)#进行详情页爬取def parse_detail(self,response):item = response.meta['item']job_sec = ''.join(response.xpath('//*[@id="main"]/div[3]/div/div[2]/div[2]/div[1]/div/text()').extract()).strip() #职位描述company = ''.join(response.xpath('//*[@id="main"]/div[3]/div/div[2]/div[2]/div[2]/div/text()').extract()).strip() #公司介绍job_location = ''.join(response.xpath('//*[@id="main"]/div[3]/div/div[2]/div[2]/div[6]/div/div[1]/text()').extract()).strip()#公司地址item['job_sec'] = job_secitem['company'] = companyitem['job_location'] = job_locationyield item

items.py

import scrapyclass BoosScrapyItem(scrapy.Item):company=scrapy.Field()job_location=scrapy.Field()job_tags=scrapy.Field()title=scrapy.Field()salary=scrapy.Field()job_sec=scrapy.Field()

middlewares.py

from scrapy import signals
import random,json
from itemadapter import is_item, ItemAdapterclass BoosScrapySpiderMiddleware:@classmethoddef from_crawler(cls, crawler):s = cls()crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)return sdef process_spider_input(self, response, spider):return Nonedef process_spider_output(self, response, result, spider):for i in result:yield idef process_spider_exception(self, response, exception, spider):passdef process_start_requests(self, start_requests, spider):for r in start_requests:yield rdef spider_opened(self, spider):spider.logger.info('Spider opened: %s' % spider.name)class BoosScrapyDownloaderMiddleware:user_agent_list = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 ""(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 ""(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 ""(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 ""(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 ""(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 ""(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 ""(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 ""(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 ""(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"]#可用代理池PROXY_http = ['127.0.0.1:7890']PROXY_https = ['127.0.0.1:7890']@classmethoddef from_crawler(cls, crawler):# This method is used by Scrapy to create your spiders.s = cls()crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)return s#拦截请求def process_request(self, request, spider):#UA伪装cookies="填写自己cookies"cookies = {i.split("=")[0]:i.split("=")[1] for i in cookies.split("; ")}request.cookies = cookiesrequest.headers['User-Agent'] = random.choice(self.user_agent_list)return Nonedef process_response(self, request, response, spider):return responsedef process_exception(self, request, exception, spider):if request.url.split(':')[0] == 'http':#代理request.meta['proxy'] = 'http://'+random.choice(self.PROXY_http)else:request.meta['proxy'] = 'https://' + random.choice(self.PROXY_https)return request  #将修正之后的请求对象进行重新的请求发送def spider_opened(self, spider):spider.logger.info('Spider opened: %s' % spider.name)

pipelines.py

import pymysqlclass BoosScrapyPipeline:def process_item(self, item, spider):return itemclass mysqlPileLine(object):conn = Nonecursor = Nonedef open_spider(self,spider):self.conn = pymysql.Connect(host='127.0.0.1',port=3306,user='root',passwd='123456',db='taobao',charset='utf8')def process_item(self,item,spider):self.cursor = self.conn.cursor()try:self.cursor.execute('insert into boos values(null,"%s","%s","%s","%s","%s","%s")'%(item['title'],item['salary'], item['job_sec'],item['company'],item['job_location'],item['job_tags']))self.conn.commit()except Exception as e:print("mysql插入数据失败",e)self.conn.rollback()return itemdef close_spider(self,spider):self.cursor.close()self.conn.close()

settings.py

BOT_NAME = 'boos_scrapy'SPIDER_MODULES = ['boos_scrapy.spiders']
NEWSPIDER_MODULE = 'boos_scrapy.spiders'ROBOTSTXT_OBEY = False
LOG_LEVEL = 'ERROR'
COOKIES_ENABLED = TrueDEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.9,zh-HK;q=0.8',
}DOWNLOADER_MIDDLEWARES = {'boos_scrapy.middlewares.BoosScrapyDownloaderMiddleware': 543,
}#开启访问频率限制
AUTOTHROTTLE_ENABLED = True
#设置访问开始的延迟
AUTOTHROTTLE_START_DELAY = 8
#设置访问之间的最大延迟
AUTOTHROTTLE_MAX_DELAY = 60
#设置Scrapy 并行发给每台远程服务器的请求数量
AUTOTHROTTLE_TARGET_CONCURRENCY= 1.0
#设置下裁之后的自动延迟
DOWNLOAD_DELAY = 3ITEM_PIPELINES = {'boos_scrapy.pipelines.BoosScrapyPipeline': 300,'boos_scrapy.pipelines.mysqlPileLine' : 301
}

main.py
运行

from scrapy import cmdlinecmdline.execute("scrapy crawl example".split())

创建数据库sql语句

CREATE TABLE `boos` (`id` int(11) NOT NULL AUTO_INCREMENT,`title` varchar(100) DEFAULT NULL,`salary` varchar(1000) DEFAULT NULL,`job_sec` varchar(1000) DEFAULT NULL,`company` varchar(1000) DEFAULT NULL,`job_location` varchar(1000) DEFAULT NULL,`job_tags` varchar(1000) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=99 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_784712.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员接私活的必备10个网站

大家好&#xff0c;我是小铁。一个实力与逗比的结合体。 今天不讲技术了&#xff0c;我来给大家推荐一些程序员接私活的网站。 开发帮 http://www.52solution.com/kb 外包大师http://www.waibaodashi.com/ 猿急送https://www.yuanjisong.com/ 解放号https://www.jfh.com/ …

今天看了下网站:龙悦居社区网,alexa排名了

2019独角兽企业重金招聘Python工程师标准>>> 建站快1个月了&#xff0c;以前一直在alexa没有排名信息&#xff0c;今天一查&#xff0c;有排名了 转载于:https://my.oschina.net/u/257088/blog/140426

java实现电话的呼叫转移_「呼叫转移设置」呼叫转移流程分析(一) - seo实验室...

呼叫转移设置Android5.0之后的版本&#xff0c;手机的CallSetting设置一般在package/APPs/service/Telephony中下面为呼叫转移流程图&#xff0c;包括应用层与RIL的request1.CallFeartureSettingActivity.java为通话设置入口//在谷歌的源码中没有这个类&#xff0c;可以直接看2…

织梦定时更新栏目html,网站栏目添加与维护

1. 网站栏目添加与维护1.1. 网站栏目管理网站栏目管理是网站的核心部分&#xff0c;是网站内容添加的前提条件。网站栏目也是网站首页的导航条&#xff0c;有着引导网站用户的作用。同时他还是网站地图&#xff0c;在后台生成的百度Sitemap中就有相关的栏目内容。网站栏目在网站…

png 微软ppt 透明度_挖到一个宝藏级的PPT素材网站,哭着五星好评,免费又实用...

今天分享一个超级实用的PPT素材网站&#xff0c;有了它&#xff0c;就再也不用去各大图片素材网站上费尽心机的找背景图了。好了&#xff0c;不兜圈子了&#xff01;直接上网址&#xff1a;Undraw网址&#xff1a;https://undraw.co/illustrations网站上都是一些简约风格的插画…

Google Analytics SEO 实时 网站 访问量 统计

说明&#xff1a; 之前一直在想要怎么才能让aplexos.com域名网站能够统计访问量&#xff0c;网站是使用github.io搭建&#xff0c;不好统计静态网站访问量&#xff0c;想借助工具&#xff0c;但是效果不好&#xff0c;不小心看Google Analytics&#xff0c;然后就注册了…

web漏洞扫描工具_ubuntu linux系统下web网站敏感目录漏洞扫描工具

大家好&#xff0c;今天我们来介绍下&#xff1a;web网站敏感目录漏洞扫描工具一、CansionCansina一款用于发现网站的敏感目录和内容的安全测试工具&#xff0c;通过分析服务器的响应进行探测并使用sqlite保证数据持久性特性多线程HTTP/S 代理支持数据持久性 (sqlite3)多后缀支…

python手机端给电脑端发送数据_手机端网站和pc端网站差别大吗

如今是互联网营销的时代&#xff0c;要做好企业的网络营销&#xff0c;那么企业的网站是一个利器&#xff0c;因为网站不仅可以展示企业的文化、产品&#xff0c;还可以通过在搜索引擎的排名给企业带来流量&#xff0c;让企业网站排名和流量都会增加&#xff0c;现在智能手机越…

多网站情况下配置nginx 301 永久重定向

2019独角兽企业重金招聘Python工程师标准>>> 已经配置成功2个网站在lnmp环境下 修改其中一个网站的301重定向 Step 1&#xff1a; 虚拟主机配置文件 xxx.com.conf 修改成&#xff1a; server_name xxx.com; index index.html index.htm index.php defau…

中关村网站产品参数页的参数纠错的制作

今天突然想在正在做的网站中加上个像中关村一样的参数纠错的功能&#xff0c;效果如下图&#xff1a; 虽然看起来好像蛮简单&#xff0c;但是自己还是想了一下午加上晚上的2个小时&#xff0c;不过等到自己做出来的时候好像也感觉到蛮简单的&#xff0c;其实这种web页面的小特效…

电子商务网站IDC网络拓扑设计

这个拓扑是我为之前公司设计的线上环境的拓扑看着很简单&#xff0c;可是这是我为了让别人看懂而一再精简的&#xff0c;里面把很多实施细节忽略掉了说下要想完成这个拓扑需要的知识储备&#xff1a;至少需要CCNP相当的水平这里面用到了动态路由协议&#xff0c;VLAN划分&#…

查看网站用何种web服务器的命令

查看网站用何种web服务器的命令http://blog.163.com/huv520126/blog/static/2776523920101030104928998/ curl --head xxxxx转载于:https://blog.51cto.com/7499256/1575973

万网免费主机wordpress快速建站教程-wordpress下载及安装

进入wordpress官网&#xff08;http://cn.wordpress.org&#xff09;下载最新的wordpress安装程序&#xff0c;下载完成后解压到任意电脑目录。解压完毕后&#xff0c;使用FTP管理工具上传安装文件至主机htdocs目录。这里使用的是FlashFXP。首先点击连接按钮&#xff0c;填上FT…

访问网站出现图片破裂

访问网站出现图片破裂访问网站的时候出现图片破裂现象本人排查思路如下几点:1、刚开始去查看图片属性登陆服务器查看图片都存在,而且权限都有,但是图片还是不行.2、接着换浏览器测试问题依旧.3、找朋友在别的地方测试都ok.4、最终确定是本地办公网络的原因,主要是网络延迟大,传…

75佳非常漂亮的 CSS 网站布局欣赏(系列五)

互联网高速发展中&#xff0c;每天都有成千上万的新网站诞生。最早的网站是没有样式的&#xff0c;后来引入了 CSS 用来格式化结构化的网页内容&#xff0c;用于精确的控制网页的布局和外观。然而因为浏览器兼容性问题&#xff0c;要使用 CSS 制作出高质量的网站不容易。今天开…

[导入]探讨高访问量网站优化方案(从图片角度)

摘要: 我们知道现在一个好的网站都面临着访问量的问题.高访问量的网站服务器的压力大概来自以下两个方面: 第一:数据库,大量的数据查询操作必定会消耗大部分时间. 第二:WEB服务器本身,大量的图片以及js文件的加载 . 这里我针对第二项说下大多网站在这方面可能进行的优化操作.个…

百度单方面修改网站url导致大量404

2019独角兽企业重金招聘Python工程师标准>>> 百度抓取到的内容&#xff0c;用户搜索并访问后&#xff0c;百度改写了url&#xff08;域名之后的第二个目录&#xff09;&#xff0c;导致出现大量的404&#xff0c;交涉无果&#xff0c;没办法&#xff0c;只能自己修复…

网站安装打包 webconfig修改[三]

在net中&#xff0c;在System.Configuration.ConfigurationManager中&#xff0c;提供了几个静态方法&#xff0c;用来修改配置文件。 如:System.Configuration.Configuration config System.Configuration.ConfigurationManager.OpenMachineConfiguration(); 获得应用程序下的…

学用MVC4做网站一:修改密码1.4

一、用户 1.1用户注册 1.2用户登录 1.3修改密码 1.4修改资料 在用户登陆成功后要跳转到一个页面&#xff0c;暂且叫做用户中心吧。在【UserController】添加[default] action [UserAuthorize]public ActionResult Default(){userRsy new UserRepository();var _user userRsy.…

动态网站基础

1. 通信&#xff1a; HTTP, URL, 请求和响应 2. 数据存储&#xff1a; 数据库 3. 表示&#xff1a; 将模板渲染成HTML或其他格式 然后把这3部分组合在一起&#xff0c;即WEB框架。比如Django。 也就是传说中的MVC。这样的好处是 1&#xff09; 灵活 2&#xff09; 清晰 3&#…