当前位置: 首页 > news >正文

做盗链网站wordpress英文主题破解版

做盗链网站,wordpress英文主题破解版,如何快速构建一个网站,网站建设常用单词SCrapy框架实现对BOSS直聘的爬取 文章目录 SCrapy框架实现对BOSS直聘的爬取对SCrapy框架的一个简单认识Scrapy 组件的作用Scrapy 数据流 1. 测试反爬2. 定义一个下载中间件类,截取spiders的请求#xff08;中间件直接截取请求#xff0c;并且返回给Spider进行数据解析#x…SCrapy框架实现对BOSS直聘的爬取 文章目录 SCrapy框架实现对BOSS直聘的爬取对SCrapy框架的一个简单认识Scrapy 组件的作用Scrapy 数据流 1. 测试反爬2. 定义一个下载中间件类,截取spiders的请求中间件直接截取请求并且返回给Spider进行数据解析数据解析操作 对SCrapy框架的一个简单认识 Scrapy 组件的作用 Engine引擎负责控制系统所有组件之间的数据流并在发生某些操作时触发事件。它是整个爬虫的核心。 Scheduler调度器接收引擎的请求对请求去重并放入队列中。当引擎请求新的请求时将队列中的请求按顺序返回给引擎。 Downloader下载器负责获取网页数据并将其返回给引擎引擎再将数据传给 Spiders爬虫。 Spiders爬虫解析响应从中提取出 Items项目和新的 Requests请求。 Item Pipeline项目管道处理爬虫提取的项目包括清理、验证和存储项目。 Downloader middlewares下载器中间件处理从引擎到下载器的请求和从下载器到引擎的响应用于在这些过程中修改或替换请求和响应。 Spider middlewares爬虫中间件处理爬虫的输入响应和输出项目和请求可以对这些数据进行修改、添加或删除。 Scrapy 数据流 初始请求 Scrapy 会实例化一个 Crawler 对象在该对象中创建 Spider 对象和 Engine 对象。通过 Engine 对象打开 Spider并生成第一个 request请求。 请求处理流程 步骤 1Engine 从 Spiders 获取初始请求。步骤 2Engine 把请求给调度器并询问下一次请求。步骤 3Scheduler 对 URL 去重放到队列中等待并把下一个 request 返回给 Engine。步骤 4Engine 把从调度器返回的 request 经过下载中间件交给下载器。步骤 5Downloader 下载页面后生成一个 Response响应并通过下载器中间件将其发送到 Engine。步骤 6Engine 接收响应并通过爬虫中间件将其发送到爬虫进行处理。步骤 7爬虫接收到响应解析处理响应提取出 Items 和 新的 Requests再通过爬虫中间件提交给 Engine。步骤 8Engine 把接收到的 Items 提交给 Item Pipeline把接收到的 Requests 提交给调度器。 重复过程 重复上述步骤直到 Scheduler 中没有请求为止。 拿到一个网站爬取需求首先需要进行分析网站的反爬措施再根据反爬漏洞想到对应的解决方法 1. 测试反爬 import time from random import randint, choice import requestsurl https://ja.58.com/job.shtml?utm_sourcesem-baidu-pcspmu-2few7p4vh988mb62t1.2few8w827wgt4eurg.kd_201345177084.cr_43861026238.ac_20304970.cd_11302497077865040299user_agents [Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0,Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.0.0,Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36 Edg/100.0.0.0 ]headers {User-Agent: choice(user_agents) }response requests.get(urlurl, headersheaders)with open(test.html, w, encodingutf-8) as f:f.write(response.text)# 随机延时 1 到 5 秒 time.sleep(randint(1, 5)) 可知直接爬取会被屏蔽但是正常打开没有问题 因此想到用来selenium库来进行打开操作同时获取cookie保存 def getcookie(self, url, cookies):driver webdriver.Chrome()driver.get(url)time.sleep(6)dict_cookies driver.get_cookies()json_cookies json.dumps(dict_cookies)with open(cookies, w) as fp:fp.write(json_cookies)print(Cookies保存成功)driver.quit() def load_cookies(self):with open(self.cookie_file, r) as fp:cookies json.load(fp)for cookie in cookies:if domain in cookie:del cookie[domain]self.driver.add_cookie(cookie)2. 定义一个下载中间件类,截取spiders的请求中间件直接截取请求并且返回给Spider进行数据解析 class SeleniumMiddleware:query city_id def __init__(self):self.cookie_file boss_cookies.json# 检查文件是否存在如果不存在则创建一个空文件if not os.path.exists(self.cookie_file):with open(self.cookie_file, w) as f:passself.getcookie(https://www.zhipin.com/web/geek/job-recommend, self.cookie_file)self.driver webdriver.Chrome()def getcookie(self, url, cookies):#此处省略def load_cookies(self):#此处省略def process_request(self, request, spider):try:if request.meta.get(first_request, True):qe input(请搜索岗位和城市id(空格隔开):).split( )self.query qe[0]self.city_id qe[1]target_url fhttps://www.zhipin.com/web/geek/job?query{self.query}city{self.city_id}page1q: str self.queryc self.city_idrequest.meta[first_request] Falseelse:page int(request.meta.get(page_number))target_url fhttps://www.zhipin.com/web/geek/job?query{self.query}city{self.city_id}page{page}print(fFetching URL: {target_url})self.driver.get(target_url)self.load_cookies()self.driver.refresh()WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.CLASS_NAME, job-card-wrapper)))data self.driver.page_sourcereturn HtmlResponse(urlrequest.url, bodydata, encodingutf-8, requestrequest)except Exception as e:print(fAn error occurred: {e})return HtmlResponse(urlrequest.url, status500, requestrequest)def __del__(self):if self.driver:self.driver.quit() 请求代码 WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.CLASS_NAME, job-card-wrapper))) 因为boss直聘具有反爬操作很多时候能够检测出来不是正常用户需要用该方法反复进行请求操作直到html页面中能够获取我们想要的标签内容(这个标签下的很多数据都是我们需要进行爬取操作的数据) 数据解析操作 使用Xpath来进行同时对空数据进行处理 import scrapy from ..items import BossItemclass BossSpider(scrapy.Spider):name bossallowed_domains [www.zhipin.com]start_urls [https://www.zhipin.com/]page 1def parse(self, response):with open(test.html, w, encodingutf-8) as f:f.write(response.text)# 改进的XPath表达式li_list response.xpath(//li[classjob-card-wrapper])print(fNumber of items found: {len(li_list)})for li in li_list:title li.xpath(.//span[classjob-name]/text()).extract_first() or salary li.xpath(.//span[classsalary]/text()).extract_first() or area li.xpath(.//span[classjob-area]/text()).extract_first() or # 确保提取job_lable_list的正确性job_lable_list li.xpath(.//ul[classtag-list]//text()).extract()if len(job_lable_list) 2:experience job_lable_list[0] or education job_lable_list[1] or else:experience education company li.xpath(.//h3[classcompany-name]/a/text()).extract_first() or # 确保提取company_message的正确性company_message li.xpath(.//ul[classcompany-tag-list]//text()).extract()company_type company_message[0] if company_message else # 提取boon字段boon li.xpath(.//div[classjob_card_footer]//div[classinfo-desc]/text()).extract()boon boon[0] if boon else None# 技能skill_list li.xpath(.//div[classjob-card-footer clearfix]//ul[classtag-list]/li/text()).extract() or []skill |.join(skill_list)# 创建BossItem对象并传递数据book BossItem(titletitle,addressarea,salarysalary,experienceexperience,educationeducation,companycompany,companyTypecompany_type,skill_listskill,)yield bookif self.page 10:self.page 1next_url fhttps://www.zhipin.com/web/geek/job?queryjavacity101210100page{self.page}yield scrapy.Request(urlnext_url,callbackself.parse,meta{page_number: self.page, first_request: False}) spider/boss.py中代码的注意事项 if self.page 10:self.page 1next_url fhttps://www.zhipin.com/web/geek/job?queryjavacity101210100page{self.page}yield scrapy.Request(urlnext_url,callbackself.parse,meta{page_number: self.page, first_request: False})注意:此代码next_url传过去不会真正的被下载器中间件处理而是为了防止不报错而进行的(不知道哪错了) 中间件部分代码 if request.meta.get(first_request, True):qe input(请搜索岗位和城市id(空格隔开):).split( )self.query qe[0]self.city_id qe[1]target_url fhttps://www.zhipin.com/web/geek/job?query{self.query}city{self.city_id}page1q: str self.queryc self.city_idrequest.meta[first_request] Falseelse:page int(request.meta.get(page_number))target_url fhttps://www.zhipin.com/web/geek/job?query{self.query}city{self.city_id}page{page}由于csdn下载代码需要开启vip具体代码实现可以访问我的github: 2240774934/Crawler_instances: 最新BOSS直聘爬取以及其他常见网站爬取 (github.com)
http://www.zqtcl.cn/news/327483/

相关文章:

  • seo网站优化推广怎么做龙岗中心医院
  • 建网站程序智能网站建设平台
  • 建筑公司分几级资质seo入门培训
  • wap类网站上海网站建设免费推
  • 网站建设哪家好公司建设银行网站怎么登陆不
  • 关于建设网站的需求wordpress不能发布文章
  • 如何一键建淘宝客网站中国建设银行金华分行网站
  • 给wordpress添加公告英语seo
  • 佛山市网站建设系统wap浏览器网页版
  • 关于小说网站的一些建设流程学做蛋糕有哪些网站
  • 益阳购物网站开发设计禹城网站制作
  • 教育网站开发文档全网营销推广案例
  • 最流行的网站开发框架wordpress阅读权限
  • 怎么做推广网站创立网站
  • 制作自己的网站需要什么材料网站计费系统怎么做
  • 网站和域名的区别昆山网站开发建设公司
  • 兼职网站推广如何做西安市商标局
  • 打开网站说建设中是什么问题莱芜金点子招小时工
  • 做网站的相关协议秦皇岛解封最新消息今天
  • 网站托管维护方案新闻媒体发稿平台
  • 网站扩展名四平网站建设怎么选
  • 网站制作价格与售后视频网站建设有什么意义
  • 网站建设+太原1核1g可以做几个网站
  • 电商设计网站有哪些内容西安百度推广外包
  • 深圳网站建设价格多少做废旧金属的网站
  • wordpress 文档超级优化空间
  • 湖北seo网站推广官方网站怎么制作
  • 随州网站seo诊断wordpress 只显示一个主题
  • 建站登录可信网站认证 费用
  • 互站网站源码用jsp做网站一般会用到什么