引言

  前途无忧提供了大量的岗位招聘信息。对于就业选择提供一种解决方案。首先是对前途无忧的 robots.txt进行检查,返回结果是404表明允许爬取该网页的所有内容。

目标内容

  如爬取python为关键字的岗位内容。

技术流程

  1.指定URL

#如前50页的URL,可在开发者工具中寻在,通过访问不同的页面发现URL的规律。
for i in range(1,50):pages_url.append('https://search.51job.com/list/000000,000000,0000,00,9,99,%25E5%25AE%25B6%25E6%2595%2599,2,{}.html'.format(i))
#UA伪装,产生随机的UA
ua=UserAgent()
headers = {'User-Agent': ua.random
}
param = {'lang': 'c','postchannel': 0000,'workyear': 99,'cotype': 99,'degreefrom': 99,'jobterm': 99,'companysize': 99,'ord_field': 0,'dibiaoid': 0,'line': '','welfare': ''
}

  2.发起页面请求

dic_page_text = []
def get_dic_page_text(url):response = rq.get(url = url,headers = headers,params = param).text#得到的response与开发者工具显示不一致,可通过Beautifulsoap进行查看。使用正则表达对目标进行提取。techer_page_text = re.compile('window.__SEARCH_RESULT__ = (.*?)</script>').findall(response)[0]#对获取的内容进行json转码。dic_page_text.append(json.loads(techer_page_text)['engine_search_result'])#停滞1秒,避免请求的网页服务器崩溃。time.sleep(1)

  3.获得响应数据

#将获取的数据保存至列表,便于存储到数据框。
for dic in dic_page_text:job_href.append(dic['job_href'])job_name.append(dic['job_name'])company_name.append(dic['company_name'])company_href.append(dic['company_href'])providesalary_text.append(dic['providesalary_text'])workarea_text.append(dic['workarea_text'])updatedate.append(dic['updatedate'])iscommunicate.append(dic['iscommunicate'])companytype_text.append(dic['companytype_text'])degreefrom.append(dic['degreefrom'])workyear.append(dic['workyear'])issuedate.append(dic['issuedate'])jobwelf.append(dic['jobwelf'])attribute_text.append(dic['attribute_text'])companysize_text.append(dic['companysize_text'])companyind_text.append(dic['companyind_text'])url = dic['job_href']response = rq.get(url = url,headers = headers).contenttree = etree.HTML(response)page_init = tree.xpath('string(//div[@class = "tBorderTop_box"]/div)')#格式的初步处理。page = re.sub(r'\r\n','',page_init).replace(' ', '')job_information.append(page[:-4])time.sleep(1)

  4.数据持久化

init_data = pd.DataFrame({'job_href':job_href,'job_name':job_name,'company_name':company_name,'company_href':company_href,'providesalary_text':providesalary_text,'workarea_text':workarea_text,'updatedate':updatedate,'iscommunicate':iscommunicate,'companytype_text':companytype_text,'degreefrom':degreefrom,'workyear':workyear,'issuedate':issuedate,'jobwelf':jobwelf,'attribute_text':attribute_text,'companysize_text':companysize_text,'companyind_text':companyind_text,'job_information':job_information})
#当然也可存入数据库,具体看要求。
init_data.to_csv('./init_data0.csv')
代码实现
#导入模块
import re
import requests as rq
from lxml import etree
from time import sleep
from fake_useragent import UserAgent
import json
from multiprocessing.dummy import Pool as ThreadPool
import time
import modin.pandas as pd
import numpy as npbeapages_url = []
for i in range(1,10):pages_url.append('https://search.51job.com/list/000000,000000,0000,00,9,99,%25E5%25AE%25B6%25E6%2595%2599,2,{}.html'.format(i))ua=UserAgent()
headers = {'User-Agent': ua.random
}
param = {'lang': 'c','postchannel': 0000,'workyear': 99,'cotype': 99,'degreefrom': 99,'jobterm': 99,'companysize': 99,'ord_field': 0,'dibiaoid': 0,'line': '','welfare': ''
}
dic_page_text = []
def get_dic_page_text(url):response = rq.get(url = url,headers = headers,params = param).texttecher_page_text = re.compile('window.__SEARCH_RESULT__ = (.*?)</script>').findall(response)[0]dic_page_text.append(json.loads(techer_page_text)['engine_search_result'])time.sleep(1)job_href = []
job_name  =[]
company_name = []
company_href = []
providesalary_text = []
workarea_text = []
updatedate = []
iscommunicate =[]
companytype_text = []
degreefrom = []
workyear = []
issuedate = []
jobwelf = []
attribute_text = []
companysize_text = []
companyind_text = []
job_information = []def get_page_text(dic_page_text):for dic in dic_page_text:job_href.append(dic['job_href'])job_name.append(dic['job_name'])company_name.append(dic['company_name'])company_href.append(dic['company_href'])providesalary_text.append(dic['providesalary_text'])workarea_text.append(dic['workarea_text'])updatedate.append(dic['updatedate'])iscommunicate.append(dic['iscommunicate'])companytype_text.append(dic['companytype_text'])degreefrom.append(dic['degreefrom'])workyear.append(dic['workyear'])issuedate.append(dic['issuedate'])jobwelf.append(dic['jobwelf'])attribute_text.append(dic['attribute_text'])companysize_text.append(dic['companysize_text'])companyind_text.append(dic['companyind_text'])url = dic['job_href']response = rq.get(url = url,headers = headers).contenttree = etree.HTML(response)page_init = tree.xpath('string(//div[@class = "tBorderTop_box"]/div)')page = re.sub(r'\r\n','',page_init).replace(' ', '')job_information.append(page[:-4])#此处为了实现高并发。time.sleep(1)if __name__ == '__main__' :start = time.time()   ThreadPool_1 = ThreadPool(10)ThreadPool_1.map(get_dic_page_text,pages_url)ThreadPool_1.close()ThreadPool_1.join()ThreadPool_2 = ThreadPool(12)ThreadPool_2.map(get_page_text,dic_page_text)ThreadPool_2.close()ThreadPool_2.join()end = time.time()print(end-start)init_data = pd.DataFrame({'job_href':job_href,'job_name':job_name,'company_name':company_name,'company_href':company_href,'providesalary_text':providesalary_text,'workarea_text':workarea_text,'updatedate':updatedate,'iscommunicate':iscommunicate,'companytype_text':companytype_text,'degreefrom':degreefrom,'workyear':workyear,'issuedate':issuedate,'jobwelf':jobwelf,'attribute_text':attribute_text,'companysize_text':companysize_text,'companyind_text':companyind_text,'job_information':job_information})init_data.to_csv('./init_data0.csv')
致谢

首先,声明该文章非商业用途!
若有疑问可留言,也希望各位提出纠正,恳请宁不吝啬教授,谢谢!!!
同时也感谢小破站提供的网络爬虫的学习,如:
[1]: https://book.apeland.cn/details/69/

Python网络爬虫之前途无忧相关推荐

  1. 爬虫书籍-Python网络爬虫权威指南OCR库 NLTK 数据清洗 BeautifulSoup Lambda表达式 Scrapy 马尔可夫模型

    Python网络爬虫权威指南 编辑推荐 适读人群 :需要抓取Web 数据的相关软件开发人员和研究人员 作为一种采集和理解网络上海量信息的方式,网页抓取技术变得越来越重要.而编写简单的自动化程序(网络爬 ...

  2. python网络爬虫_Python网络爬虫——爬取视频网站源视频!

    原标题:Python网络爬虫--爬取视频网站源视频! 学习前提 1.了解python基础语法 2.了解re.selenium.BeautifulSoup.os.requests等python第三方库 ...

  3. 《精通Python网络爬虫:核心技术、框架与项目实战》——1.3 网络爬虫的组成...

    本节书摘来自华章出版社<精通Python网络爬虫:核心技术.框架与项目实战>一书中的第1章,第1.3节,作者 韦 玮,更多章节内容可以访问云栖社区"华章计算机"公众号查 ...

  4. python商业爬虫教程_廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程...

    廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程 1.JPG (53.51 KB, 下载次数: 1) 2019-8-9 08:15 上传 2.JPG ...

  5. python爬虫教程视频下载-利用Python网络爬虫获取电影天堂视频下载链接【详细教程】...

    相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知道最近电影更新的状态. 今天以电影天堂为例,带大家更直观的去看自己喜欢的电影,并且下载下来. [二.项目准备] ...

  6. python网络爬虫权威指南 百度云-分析《Python网络爬虫权威指南第2版》PDF及代码...

    对那些没有学过编程的人来说,计算机编程看着就像变魔术.如果编程是魔术(magic),那么网页抓取(Web scraping)就是巫术(wizardry),也就是运用"魔术"来实现精 ...

  7. python爬虫文件代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)...

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  8. 精通python网络爬虫-精通python网络爬虫

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 作者:韦玮 转载请注明出处 随着大数据时代的到来,人们对数据资源的需求越来越多, ...

  9. python爬虫程序-Python网络爬虫实战(一)快速入门

    本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站的爬虫实战来进行. 我们编写网络爬虫最主要 ...

最新文章

  1. cmake通过命令行构建静态库/动态库
  2. 手把手教你在Tensorflow实现BEGAN 达到惊人的人脸图像生成效果
  3. 关于赠书《VS Code》断货延迟的通知!
  4. fileset java_Java FileSet.iterator方法代码示例
  5. PV PVC - 每天5分钟玩转 Docker 容器技术(150)
  6. BZOJ2301: [HAOI2011]Problem b(莫比乌斯反演)
  7. android 头像球_Android一行代码实现圆形头像
  8. easyui(一) 初始easyui
  9. isinstanceof java_scala中的isInstanceOf和asInstanceOf
  10. 烂泥:更换ESXI5.0管理网卡及管理IP地址
  11. ros开发语言python效率_Python 的开发效率真的比 Java高吗?
  12. 如何使用python编程画图_【Python开发】使用python中的matplotlib进行绘图分析数据...
  13. java面试题学生表成绩表老师表_SQL经典学生老师成绩表面试题
  14. mysql免费版稳定吗_mysql免费版好用么
  15. CTF-bugku-crypto-[简单加密]-凯撒密码的base64形式
  16. cf鼠标宏数据大全_鼠标6个率?采样率、分辨率、回报率、轮询率、刷新率、采样频率...
  17. (全)Docker安装+人脸比对算法服务(win10)
  18. mongo数据库创建用户
  19. 后缀数组水水水水水水题
  20. Assemble(王爽)——nasm 和 masm的一些简单区分

热门文章

  1. PHP Switch语句的用法
  2. QR二维码的攻击方法与防御
  3. Qt开发二维码工具QR二维码生成和识别支持批量生成免费使用
  4. 组织架构分类 :职能型、项目型、弱矩阵型、强矩阵型
  5. 软件架构-从0到1认知分布式架构(上)
  6. python数据预测_利用Python编写一个数据预测工具
  7. 机器学习中的数学——病态条件
  8. matlab合理分配席位_席位分配问题的Dhondt模型和相对尾数模型 -
  9. 环信java添加好友_环信添加好友时,出现错误
  10. ln酷派t1开机进root,酷派t1无法开机