“前程无忧”(Nasdaq: JOBS) : 是国内一个集多种媒介资源优势的专业人力资源服务机构,创始人为甄荣辉。它集合了传统媒体、网络媒体及先进的信息技术,加上一支经验丰富的专业顾问队伍,提供包括招聘猎头、培训测评和人事外包在内的全方位专业人力资源服务,现在全国25个城市设有服务机构。2004年9月,前程无忧成为第一个在美国纳斯达克上市的中国人力资源服务企业,是中国最具影响力的人力资源服务供应商之一。经第三方监测机构iResearch 等调查,连续多年市场占有率第一。无忧工作网先后多次被CNNIC、Alexa 和Euromonitor评为“中国最具影响力的人才招聘网站”。

前程无忧官网: https://www.51job.com/
时间: 2019/08/10
爬取内容: 职位名称,公司名称,工资,地点,发布时间。

操作环境: win10, python3.6, jupyter notebook,谷歌浏览器

技术实现思路:

1. 注册登录前程无忧
2. 分析网页
3. 请求网页
4. 提取数据
5. 保存数据
6. 全部源码

思路分步讲解

1. 注册登录前程无忧

打开前程无忧的官网,并不能直接搜索信息,它会提醒你先注册。登录成功后就不需要再次注册了,后来发现这台电脑的其他浏览器都不需要注册也可以直接搜索职位信息了。我在手机的浏览器打开前程无忧网,还是需要注册的。

2. 分析网页

2.1、现在登录成功了,搜索python,地点选择贵州,搜索

2.2、查看网页源代码(Ctrl+U)

查找(Ctrl+F)网页中的数据,最好选择公司名称这类不容易重复的内容,便于精确查找,如:广州欢创劳务派遣有限公司

结果: 在HTML源码中找到了需要的数据,说明我们可以从网页源码中提取信息

2.3、网页分析路径

HTML源码对应的URL就是浏览器导航栏的URL,把它复制下来就可以请求网页了。

本次搜索的关键词有两个页面,就需要对比它们的路径,实现页面跳转。通过对比测试,发现页面由它控制的。

3. 请求网页

3.1、查看网页的请求方式,它的请求方法是get

3.2、设置headers

haeders用来告诉服务器,这是一个浏览器发出的请求,达到反爬虫的目的,其中放Referer,Cookie,User-Agent等

  • Referer:反爬虫路径
  • Cookie:存放用户登录信息
  • User-Agent:浏览器的信息
3.3、网页使用gbk编码方式

3.4、发出请求获取html源码
import requestsurl = 'https://search.51job.com/list/000000,000000,0000,00,9,99,python,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='
#设置请求头
headers={'Cookie': 'uid=6120d9ad9342bd596063a1caa5e700c8; nsearch=jobarea%3D%26%7C%26ord_field%3D%26%7C%26recentSearch0%3D%26%7C%26recentSearch1%3D%26%7C%26recentSearch2%3D%26%7C%26recentSearch3%3D%26%7C%26recentSearch4%3D%26%7C%26collapse_expansion%3D; _ujz=MTYxNTY1MjMxMA%3D%3D; ps=needv%3D0; adv=adsnew%3D0%26%7C%26adsnum%3D2199132%26%7C%26adsresume%3D1%26%7C%26adsfrom%3Dhttps%253A%252F%252Fwww.baidu.com%252Fbaidu.php%253Fsc.000000jk39biGWe9FCyuShty_aMNHEWD5_pNXOAJq5oBMfqtVdPak5nCc0CSoecJnK-czyQKCC745-ZJ0OVxI7zG83PuLrGEKFp9GiGH-j1bNMOrZrlcqbkfzay5GMMW0egdYl66KlxgR5qC8Shed0Qu_GDCTWt1UZp0fqrNfmzHgkNGgtkCMLZO5gAQlRdUO5moyBIhZe56aN5bX6.Db_NR2Ar5Od66CHnsGtVdXNdlc2D1n2xx81IZ76Y_u2qSSEWbl_4TUj5eOS8zZqOSFYOoYUlj5ZtSjtElZdq-SHe35SkbLY5dtxqTglS54pPO3e3et-LYxtjWOvrWqXhJzOqE66ObwxegYgOCNEOeZeIZV8OUSEUdeyPbPpUDSr1FIIbzgfLqhiex3GuzuQ8-5HvUO7i_nYQZA1__R0.U1Yk0ZDqPH7JUvc0TA-W5H00IjdJUvc0pyYqnW0Y0ATqTZFB0ZNG5yF9pywd0ZKGujYkn0KWpyfqnHD30AdY5HDsnHIxnH0krNtknjfYg1nvnjD0pvbqn0KzIjY4n100uy-b5HDYPW-xnWDsrH7xnWbdnWPxnWbdnWKxnWbsrH-xnWbdPW9xnW63n1IxnWbznWKxnWm1PHKxnWbYPWKxnWbvPj00mhbqnHRdg1Ddr7tznjf0UynqnH6zrHbsrj6zrNtknj0kg1Dsn-ts0Z7spyfqn0Kkmv-b5H00ThIYmyTqn0K9mWYsg100ugFM5H00TZ0qnWbLPH0snjn1P6K8IM0qna3snj0snj0sn0KVIZ0qn0KbuAqs5H00ThCqn0KbugmqTAn0uMfqn0KspjYs0Aq15H00mMTqnH00UMfqn0K1XWY0mgPxpywW5gK1QyPV0A-bm1dRfsKYIgnqnHc4nHRknjmdrHRLnWf4nW63nWn0ThNkIjYkPHmdn1R3P1fzrjn40ZPGujdhuhfYuHnLm10snAm4nHF-0AP1UHdAf1b4nWmLrjRznbNaP1wK0A7W5HD0TA3qn0KkUgfqn0KkUgnqn0KlIjYk0AdWgvuzUvYqn7tsg1DsPjuxn0Kbmy4dmhNxTAk9Uh-bT1Ysg1Kxn1n3Pjc4Pdts0ZK9I7qhUA7M5H00uAPGujYs0ANYpyfqQHD0mgPsmvnqn0KdTA-8mvnqn0KkUymqn0KhmLNY5H00XMK_Ignqn0K9uAu_myTqnfK_uhnqn0KEIjYs0AqzTZfqnanscznsc10WnansQW0snj0snansczns0APzm1Y1PjD1n6%2526word%253D51job%2526ck%253D4702.2.127.285.564.290.550.423%2526shh%253Dwww.baidu.com%2526us%253D1.0.1.0.0.0.0%2526bc%253D110101; slife=lowbrowser%3Dnot%26%7C%26lastlogindate%3D20190809%26%7C%26securetime%3DVWkANlk5A2ICY1NoWmlaOVNhBDY%253D; track=registertype%3D1; 51job=cuid%3D161565231%26%7C%26cusername%3Dphone_13124677419_201908097566%26%7C%26cpassword%3D%26%7C%26cname%3D%25D1%25EE%25D3%25D1%26%7C%26cemail%3Dayouleyang%2540qq.com%26%7C%26cemailstatus%3D0%26%7C%26cnickname%3D%26%7C%26ccry%3D.0z6DBWuU5bQc%26%7C%26cconfirmkey%3D%25241%2524Z.XBF.fe%2524p7gSHeS%252Fox4niAc8IxBDw0%26%7C%26cresumeids%3D.0ZJUV4DUrVTU%257C%26%7C%26cautologin%3D1%26%7C%26cenglish%3D0%26%7C%26sex%3D0%26%7C%26cnamekey%3D%25241%25249.n6uUi.%2524xZtxv4qHPoyz%252FYLZm734Z.%26%7C%26to%3D82c7f22825d5faf5a3b114afc23ff27f5d4d7adf%26%7C%26; search=jobarea%7E%60000000%7C%21ord_field%7E%600%7C%21recentSearch0%7E%601%A1%FB%A1%FA000000%2C00%A1%FB%A1%FA000000%A1%FB%A1%FA0000%A1%FB%A1%FA00%A1%FB%A1%FA9%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FApython%A1%FB%A1%FA2%A1%FB%A1%FA%A1%FB%A1%FA-1%A1%FB%A1%FA1565241481%A1%FB%A1%FA0%A1%FB%A1%FA%A1%FB%A1%FA%7C%21recentSearch1%7E%601%A1%FB%A1%FA260200%2C00%A1%FB%A1%FA000000%A1%FB%A1%FA0000%A1%FB%A1%FA00%A1%FB%A1%FA9%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FApython%A1%FB%A1%FA2%A1%FB%A1%FA%A1%FB%A1%FA-1%A1%FB%A1%FA1565362675%A1%FB%A1%FA0%A1%FB%A1%FA%A1%FB%A1%FA%7C%21','Referer': 'https://search.51job.com/list/260200,000000,0000,00,9,99,python,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
res = requests.get(url,headers=headers)#发出请求
res.encoding = 'gbk'#这个网页使用gbk编码
print (res.text) #输出的内容和网页源码一样

4. 提取数据

4.1、使用etree解析网页
from lxml import etree
html = etree.HTML(res.text) #etree解析网页

输出结果:
<Element html at 0x2905f362408>
解析成功,当然,这不是拿给我们看的。

4.2、定位网页节点


通过检查,发现每条招聘信息都在<div class="el"> </div>中,先复制它的节点,再迭代查找出里面的内容。

//*[@id="resultList"]/div[4] #这指的是id 为resultList的第四个div#应该改为
'//*[@id="resultList"]/div'
#因为要获取所有的resultList的所有div
4.3、提取数据
4.3.1、分别判断是否为空再爬取每条数据
for et in html.xpath('//*[@id="resultList"]/div'):jobName = et.xpath('./p/span/a/@title')if len(jobName) !=0:jobName = jobName[0]name = et.xpath('./span[1]/a/@title')      if len(name) !=0:name = name[0]city= et.xpath('./span[2]/text()')if len(city) !=0:city = city[0]salary = et.xpath('.//span[3]/text()')if len(salary) !=0:salary = salary[0]time = et.xpath('.//span[4]/text()')if len(time) !=0:time = time[0]    print (jobName,name,city,salary,time)

输出结果开头:

输出结果结尾:

出现这种状况可能的原因:
(1)html属性同一,不能准确定位,也是注意原因
(2)html数据被隐藏,没有展示

4.3.2、爬取每条数据后一起判断是否为空
for et in html.xpath('//*[@id="resultList"]/div'):jobName = et.xpath('./p/span/a/@title')name = et.xpath('./span[1]/a/@title')city= et.xpath('./span[2]/text()')salary = et.xpath('.//span[3]/text()')time = et.xpath('.//span[4]/text()')if len(jobName)&len(name)&len(city)&len(salary)&len(time) !=0: #判断所有信息不为空再输出jobName = jobName[0] #[0]输出数组中的第一个值name = name[0]city = city[0]salary = salary[0]time = time[0] print (jobName,name,city,salary,time)

输出结果:

Python 软件工程师 贵州爱水水务技术工程有限公司 贵阳 7-9千/月 08-09
Python开发工程师(证券) 东方财富信息股份有限公司 上海-徐汇区 1.5-2.5万/月 08-09
Python开发工程师 慧承(上海)供应链科技有限公司大连分公司 大连 0.6-1万/月 08-09
Python工程师 深圳市世纪恒程知识产权代理事务所 武汉-东湖新技... 6-8千/月 08-09
初级python/R 工程师 上海柯林布瑞信息技术有限公司 上海-徐汇区 0.5-1万/月 08-09
Python高级开发工程师 湖南合天智汇信息技术有限公司 长沙-岳麓区 0.8-1.4万/月 08-09
Python高级开发工程师 合肥市合趣网络科技有限公司 合肥 1.5-2万/月 08-09
Python开发工程师 南京新立讯科技股份有限公司 南京-雨花台区 1-1.5万/月 08-09
Python开发工程师(见习) 上海新帆实业股份有限公司 上海-浦东新区 6-8千/月 08-09
上位机Python软件工程师 深圳市泰达机器人有限公司 深圳-南山区 0.8-1万/月 08-09
Python 后台开发工程师 上海媒智科技有限公司 上海-徐汇区 1.1-2万/月 08-09
Python开发 上海汉图科技有限公司 上海-浦东新区 1.5-2.3万/月 08-09
教学老师(python和scratch) 杭州智一信息技术有限公司 杭州-西湖区 1-1.5万/月 08-09
Python开发工程师 上海飞络信息科技有限公司 上海 0.8-1万/月 08-09
Python开发工程师 亚信科技(成都)有限公司 南京-雨花台区 1.3-2.5万/月 08-09
Python开发工程师 重庆商盟科技有限公司 重庆-江北区 0.8-1.5万/月 08-09
Python讲师 带薪年假 湖南潭州教育网络科技有限公司成都分公司 成都-武侯区 0.8-1.2万/月 08-09
python 开发工程师 善诚科技发展(上海)有限公司 无锡-无锡新区 6-8千/月 08-09
Python开发工程师 北京联创众升科技有限公司 北京-海淀区 1-1.5万/月 08-09
Python高级开发工程师 河北燕雀信息科技有限公司 异地招聘 0.6-1.2万/月 08-09
PYTHON开发工程师 北京斐波科技有限公司 天津-津南区 1-2万/月 08-09
Python工程师(爬虫方向)+包住宿+周末双休+五险一金 深圳市中源航空服务有限公司 深圳 1.5-2.5万/月 08-09
Python开发工程师(实习生) 四川懿晟国际教育咨询有限公司 成都-高新区 3-4.5千/月 08-09
Python游戏服务端高级开发 湖南纳米娱乐网络科技有限公司 长沙-岳麓区 1-2万/月 08-09
Scratch/Python课程设计师 立乐教育科技(上海)有限公司 上海-普陀区 0.8-1.5万/月 08-09
Python运维工程师 桑田智能技术(上海)有限公司 上海-宝山区 1.8-2.5万/月 08-09
后台开发工程师(C++,Python,go) 深圳市云之梦科技有限公司 深圳-南山区 1-1.5万/月 08-09
高级软件工程师 (python/Java) 吉林省掌控物流科技有限公司 长春-净月经济... 0.8-1.5万/月 08-09
python开发工程师 郑州创恒实业有限公司 郑州-金水区 0.5-1万/月 08-09
Python高级开发工程师 广州回头车信息科技有限公司 广州-天河区 1.5-2.5万/月 08-09
软件助理(python) 深圳市嘉卉互联科技有限公司 深圳 4.5-5.5千/月 08-09
资深python工程师 上海展湾信息科技有限公司 上海-杨浦区 1-1.5万/月 08-09
自动化测试工程师python、c 上海迅元信息科技有限公司 上海-浦东新区 1-1.5万/月 08-09
Python开发工程师 深圳市紫川软件有限公司 上海-浦东新区 1-1.5万/月 08-09
Python开发工程师 小水滴科技 上海-浦东新区 1-1.5万/月 08-09
python开发助理 深圳市文言科技发展有限公司 深圳 6-8千/月 08-09
Python实习生 重庆且动科技有限公司 成都-青羊区 4.5-6千/月 08-09
Python爬虫工程师 成都领优文化传播有限公司 成都-高新区 0.8-1万/月 08-09
Python后台开发工程师 尤盛信息技术(上海)有限公司 上海-浦东新区 1.2-2.2万/月 08-09
Python高级开发工程师(代外企直招) 上海环籁网络科技有限公司 上海-浦东新区 1.5-3万/月 08-09
研发工程师(运维、python语言) 安美微客(北京)互联网科技有限公司 上海-普陀区 1-1.5万/月 08-09
Python开发工程师 深圳软通智能系统科技有限公司 深圳-龙岗区 5.5-7千/月 08-09
Python开发工程师 广州国交润万交通信息有限公司 广州 0.8-1.5万/月 08-09
Python开发工程师 武汉市星商电子商务有限公司 武汉-洪山区 1-1.5万/月 08-09
python开发(大数据方向) 赛速科技 西安-雁塔区 6-8千/月 08-09
Python ERP软件开发工程师 广州高博软件科技有限公司 广州-黄埔区 0.8-1.3万/月 08-09
高级python开发工程师(简单家APP) 易居(中国)企业管理集团有限公司 上海-静安区 1.8-2.3万/月 08-09
Python大数据及算法工程师 成都长益西联软件有限公司 成都-高新区 0.8-1.6万/月 08-09

5. 保存数据

把获取的信息写进csv文件,分为三个步骤:

  1. 打开csv文件
  2. 写入信息
  3. 关闭文件

如果乱码,可使用Excel表格,在数据>自文本>改Tab键为逗号>打开

6、全部源码

import requests,csv
from lxml import etree
#制作头部信息
headers={'Cookie': 'uid=6120d9ad9342bd596063a1caa5e700c8; nsearch=jobarea%3D%26%7C%26ord_field%3D%26%7C%26recentSearch0%3D%26%7C%26recentSearch1%3D%26%7C%26recentSearch2%3D%26%7C%26recentSearch3%3D%26%7C%26recentSearch4%3D%26%7C%26collapse_expansion%3D; _ujz=MTYxNTY1MjMxMA%3D%3D; ps=needv%3D0; adv=adsnew%3D0%26%7C%26adsnum%3D2199132%26%7C%26adsresume%3D1%26%7C%26adsfrom%3Dhttps%253A%252F%252Fwww.baidu.com%252Fbaidu.php%253Fsc.000000jk39biGWe9FCyuShty_aMNHEWD5_pNXOAJq5oBMfqtVdPak5nCc0CSoecJnK-czyQKCC745-ZJ0OVxI7zG83PuLrGEKFp9GiGH-j1bNMOrZrlcqbkfzay5GMMW0egdYl66KlxgR5qC8Shed0Qu_GDCTWt1UZp0fqrNfmzHgkNGgtkCMLZO5gAQlRdUO5moyBIhZe56aN5bX6.Db_NR2Ar5Od66CHnsGtVdXNdlc2D1n2xx81IZ76Y_u2qSSEWbl_4TUj5eOS8zZqOSFYOoYUlj5ZtSjtElZdq-SHe35SkbLY5dtxqTglS54pPO3e3et-LYxtjWOvrWqXhJzOqE66ObwxegYgOCNEOeZeIZV8OUSEUdeyPbPpUDSr1FIIbzgfLqhiex3GuzuQ8-5HvUO7i_nYQZA1__R0.U1Yk0ZDqPH7JUvc0TA-W5H00IjdJUvc0pyYqnW0Y0ATqTZFB0ZNG5yF9pywd0ZKGujYkn0KWpyfqnHD30AdY5HDsnHIxnH0krNtknjfYg1nvnjD0pvbqn0KzIjY4n100uy-b5HDYPW-xnWDsrH7xnWbdnWPxnWbdnWKxnWbsrH-xnWbdPW9xnW63n1IxnWbznWKxnWm1PHKxnWbYPWKxnWbvPj00mhbqnHRdg1Ddr7tznjf0UynqnH6zrHbsrj6zrNtknj0kg1Dsn-ts0Z7spyfqn0Kkmv-b5H00ThIYmyTqn0K9mWYsg100ugFM5H00TZ0qnWbLPH0snjn1P6K8IM0qna3snj0snj0sn0KVIZ0qn0KbuAqs5H00ThCqn0KbugmqTAn0uMfqn0KspjYs0Aq15H00mMTqnH00UMfqn0K1XWY0mgPxpywW5gK1QyPV0A-bm1dRfsKYIgnqnHc4nHRknjmdrHRLnWf4nW63nWn0ThNkIjYkPHmdn1R3P1fzrjn40ZPGujdhuhfYuHnLm10snAm4nHF-0AP1UHdAf1b4nWmLrjRznbNaP1wK0A7W5HD0TA3qn0KkUgfqn0KkUgnqn0KlIjYk0AdWgvuzUvYqn7tsg1DsPjuxn0Kbmy4dmhNxTAk9Uh-bT1Ysg1Kxn1n3Pjc4Pdts0ZK9I7qhUA7M5H00uAPGujYs0ANYpyfqQHD0mgPsmvnqn0KdTA-8mvnqn0KkUymqn0KhmLNY5H00XMK_Ignqn0K9uAu_myTqnfK_uhnqn0KEIjYs0AqzTZfqnanscznsc10WnansQW0snj0snansczns0APzm1Y1PjD1n6%2526word%253D51job%2526ck%253D4702.2.127.285.564.290.550.423%2526shh%253Dwww.baidu.com%2526us%253D1.0.1.0.0.0.0%2526bc%253D110101; slife=lowbrowser%3Dnot%26%7C%26lastlogindate%3D20190809%26%7C%26securetime%3DVWkANlk5A2ICY1NoWmlaOVNhBDY%253D; track=registertype%3D1; 51job=cuid%3D161565231%26%7C%26cusername%3Dphone_13124677419_201908097566%26%7C%26cpassword%3D%26%7C%26cname%3D%25D1%25EE%25D3%25D1%26%7C%26cemail%3Dayouleyang%2540qq.com%26%7C%26cemailstatus%3D0%26%7C%26cnickname%3D%26%7C%26ccry%3D.0z6DBWuU5bQc%26%7C%26cconfirmkey%3D%25241%2524Z.XBF.fe%2524p7gSHeS%252Fox4niAc8IxBDw0%26%7C%26cresumeids%3D.0ZJUV4DUrVTU%257C%26%7C%26cautologin%3D1%26%7C%26cenglish%3D0%26%7C%26sex%3D0%26%7C%26cnamekey%3D%25241%25249.n6uUi.%2524xZtxv4qHPoyz%252FYLZm734Z.%26%7C%26to%3D82c7f22825d5faf5a3b114afc23ff27f5d4d7adf%26%7C%26; search=jobarea%7E%60000000%7C%21ord_field%7E%600%7C%21recentSearch0%7E%601%A1%FB%A1%FA000000%2C00%A1%FB%A1%FA000000%A1%FB%A1%FA0000%A1%FB%A1%FA00%A1%FB%A1%FA9%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FApython%A1%FB%A1%FA2%A1%FB%A1%FA%A1%FB%A1%FA-1%A1%FB%A1%FA1565241481%A1%FB%A1%FA0%A1%FB%A1%FA%A1%FB%A1%FA%7C%21recentSearch1%7E%601%A1%FB%A1%FA260200%2C00%A1%FB%A1%FA000000%A1%FB%A1%FA0000%A1%FB%A1%FA00%A1%FB%A1%FA9%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FApython%A1%FB%A1%FA2%A1%FB%A1%FA%A1%FB%A1%FA-1%A1%FB%A1%FA1565362675%A1%FB%A1%FA0%A1%FB%A1%FA%A1%FB%A1%FA%7C%21','Referer': 'https://search.51job.com/list/260200,000000,0000,00,9,99,python,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
#创建CSV文件
fp = open('G:\51job.csv','a',newline='',encoding='utf-8')
writer = csv.writer(fp)
writer.writerow(('职位名称','公司名称','地址','薪资','时间')) #csv头部
#网页跳转
for i in range(2):url = f'https://search.51job.com/list/000000,000000,0000,00,9,99,python,2,{i}.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='res = requests.get(url,headers=headers)res.encoding = 'gbk'html = etree.HTML(res.text) #etree解析网页#爬取数据for et in html.xpath('//*[@id="resultList"]/div'):jobName = et.xpath('./p/span/a/@title')name = et.xpath('./span[1]/a/@title')city= et.xpath('./span[2]/text()')salary = et.xpath('.//span[3]/text()')time = et.xpath('.//span[4]/text()')if len(jobName)&len(name)&len(city)&len(salary)&len(time) !=0:#判断所有信息不为空再输出jobName = jobName[0]#[0]输出数组中的第一个值name = name[0]city = city[0]salary = salary[0]time = time[0] print (jobName,name,city,salary,time)writer.writerow((jobName,name,city,salary,time))#写入数据#关闭文件
fp.close()

表格结果:

python爬虫 requests+lxml爬取前程无忧网之模拟浏览器登录相关推荐

  1. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)

    在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...

  2. python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程

    python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程 前言 一丶整体思路 二丶遇到的问题 三丶分析URL 四丶解析页面 五丶写入文件 六丶完整代码 七丶最后 前言 大家好我是墨绿 头顶总 ...

  3. python抓取文献关键信息,python爬虫——使用selenium爬取知网文献相关信息

    python爬虫--使用selenium爬取知网文献相关信息 写在前面: 本文章限于交流讨论,请不要使用文章的代码去攻击别人的服务器 如侵权联系作者删除 文中的错误已经修改过来了,谢谢各位爬友指出错误 ...

  4. Python爬虫实战:爬取贝壳网二手房40000条数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...

  5. Python爬虫实战之爬取web网易云音乐——解析

    找到存储歌曲地址的url界面 首先我们要进入网易云的web页面在页面中我们随意选择一首歌曲,打开开发者工具查看响应的界面. 在这些页面中我们需要查找存储有音乐文件的url,这是我们可以打开全局搜索直接 ...

  6. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)

    今天我们来爬取一下豆瓣网上排名前250的电影. 需求:爬取豆瓣网上排名前250的电影,然后将结果保存至一个记事本里. 开发环境: python3.9 pycharm2021专业版 我们先观察网页,看看 ...

  7. python爬虫 request+lxml爬取黄页88网企业信息

    黄页88网: 简称黄页网或者黄页88,是由互联网资深人士创办于2009年11月.是一家整合企业黄页.分类信息以及时下流行的SNS社区三方面优势于一体定位于服务B2B平台的网站.主要帮助企业宣传推广公司 ...

  8. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  9. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9)的解决方法

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

最新文章

  1. breakdancer检测结构变异
  2. 低压成套ggd设备详细报价
  3. 单元测试(VS CppUnitTest)
  4. jquery的$.extent()方法的总结
  5. 分布式系统用户登录路由
  6. 语音跟踪:信号分解、锁相、鸡尾酒会效应、基于PR的信号分离
  7. QQuickWidget + QML编程实现酷炫动态动画效果
  8. python数组分成两个和相等的子集_前端面试2
  9. 可以进行单元测试么_大量实例助攻,让你的单元测试更高效
  10. ASP.NET对验证控件的一些整理(一)
  11. 解决windows7系统netmeeting无法(安装)使用问题
  12. 《C专家编程》阅读笔记
  13. Python中match语句的用法
  14. Unity的拍照功能
  15. 安卓开发——视频播放器
  16. Python 自除数
  17. 小雷的冰茶几 3386
  18. flashback六大技术之flashback query
  19. 影视剪辑副业真的可以月入过万吗?
  20. 基于Google 验证器 实现内网的双因素认证

热门文章

  1. 让“作用域和闭包”说人话
  2. FLASH按钮链接网页
  3. 群发邮件技巧集锦[转]
  4. dtoj#4224. 小L的占卜
  5. 金山快盘API二次开发 - OAUTH协议
  6. 使用Kubernetes最常见的10个错误
  7. 配置http和https
  8. java super父类方法_java super关键字,super调用父类构造方法详解
  9. [LOJ3054] 「HNOI2019」鱼
  10. 001-Windows驱动编程基础知识