最近导师让自己摸索摸索Python爬虫,好了就开始一发不可收拾的地步。正巧又碰到有位同学需要一些求职信息对求职信息进行数据分析,本着练练手的目的写了用Python爬取智联招聘网站的信息。这一爬取不得了,智联网站更新了,以前的大佬们的代码不能用,而且全是动态加载,反爬虫着实对于小白的我实在是累的不行,静态还没怎么学会动态的爬取就开始了,各种遇见坑,再出来。不过终于功夫不负有心人,也算是马马虎虎搞出来了。先上图
一个文件里面大概不到3000条数据,不算多。
首先,我就不讲什么是selenium,以及怎么安装还有chrome 的headless怎么使用。这里csdn上面有很多大牛已经给予完美的解释了ps主要我也说不好只是了解以及使用。
当你把这些基础性工作做完了,比如Python安装完毕,以及selenium PyQuery安装完毕后就可以看我的代码详解了。其实大家都是小白所以代码会有详细的注释,看看注释就明白了。废话不多说直接上代码,有啥不懂得欢迎咨询我。jianghaifu@opopto.com,或者留言给我。谢谢各位看官。
#首页负责调用
import savecsv as save
pagenum=int(input("输入您要爬取的页数"))
save.savecsv(pagenum)
# 爬取文章
from selenium import webdriver
import time, random
from pyquery import PyQuery as pq
import os
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
def _urldata_(url, pageNum):
# 新版本不支持phantomjs
# browser = webdriver.PhantomJS()
# 采用浏览器自带的无头浏览器进行查询
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
browser = webdriver.Chrome(options=chrome_options)
browser.get(url)
# # 定义一个大的列表将一个职位所有的招聘信息都放进去
joblist = []
# 点击下一页进行访问页面
for i in range(1, pageNum+1):
# 对动态网页查询并使用pyquery进行分析
doc = pq(browser.page_source)
# 获取一个多个相同属性
# htm = doc('[class="listItemBox clearfix"]')
# print(htm)
html = doc('[class="listItemBox clearfix"]').items()
listSum = []
# 获取单个属性
for tb in html:
# 定义一个空字典,用于储存数组
item = {}
# 提取岗位
job_title_info = tb('.job_title')
job_title = job_title_info.attr('title')
# 获取公司名
company_title = tb('.company_title').text()
# 获取薪资
job_saray = tb('.job_saray').text()
# 获取地址,工作要求年限,学历
job_demand = tb('.demand_item').items()
job_demand_info = []
for job in job_demand:
job_demand_info.append(job.text())
# 获取企业名称以及企业人数
commpanyDesc = tb('.info_item').items()
company_info = []
for job in commpanyDesc:
company_info.append(job.text())
# 获取更详细的信息
job_welfare = tb('.welfare_item').items()
job_welfare_info = []
for job in job_welfare:
job_welfare_info.append(job.text())
job_welfare_info_list = "|".join(job_welfare_info)
# 填入数组
item['job_title'] = job_title
item['company_title'] = company_title
item['job_saray'] = job_saray
item['job_demand_info_address'] = job_demand_info[0]
item['job_demand_info_age'] = job_demand_info[1]
item['job_demand_info_back'] = job_demand_info[2]
item['company_info_back'] = company_info[0]
item['job_welfare_info_list'] = job_welfare_info_list
listSum.append(item)
# 将所有的页面的内容进行保存
joblist += listSum
browser.find_elements_by_class_name('btn-pager')[1].click()
print("爬取第" + str(i) + "页")
print("数据共" + str(len(listSum)) + "条")
# 防止被和谐
p = random.randint(1, 4)
time.sleep(p)
return joblist
browser.quit()
# _urldata_('https://sou.zhaopin.com/?pageSize=60&jl=530&kw=python&kt=3')
# 保存成csv格式
import csv
import spiderurl as combin
def savecsv(pageNum):
# 定义一个大的列表将所有的招聘信息都放进去
job_name = ['python', 'java', '机器学习', '数据挖掘', 'c++']
# job_name = ['python']
# 工作名字
for job in job_name:
# print(job)
joblist = []
# 将页面读取的数据保存起来
# 每个工作的名字工作信息
url = 'https://sou.zhaopin.com/?pageSize=60&jl=530&kw=' + job + '&kt=3'
print("开始爬取工作:"+job+"地址是:"+url)
# 拼接完成爬取文件并解析
joblist = combin._urldata_(url, pageNum)
# 把数据存成csv格式
filenames = ["job_title", "company_title", "job_saray", "job_demand_info_address", "job_demand_info_age",
"job_demand_info_back",
"company_info_back", "job_welfare_info_list"]
for list in joblist:
# 以字典的形式写入文件
with open(job + ".csv", "a", errors="ignore", newline='') as fp:
f_csv = csv.DictWriter(fp, fieldnames=filenames)
f_csv.writerow(list)
好了就这三个文件,很简单的。喜欢就去尝试尝试,当然我的git上面也有https://github.com/Proshare/webSpider_zhilian.git
欢迎评论,我会及时回复的。