Python/Ruby

推荐列表 站点导航

当前位置:首页 > 脚本编程 > Python/Ruby >

python日常一 使用python抓取拉勾网职位信息并做简单统计分析

来源:网络整理  作者:  发布时间:2020-12-26 15:53
一直对python感兴趣,最近想玩玩爬虫,抓拉钩互联网职位招聘信息,然后做点统计什么的,废话不多说,开打开打。...

positionAdvantage, pvScore,每个职位都放在a/a标签下。

kd: kd}).encode()pn += 1op = self.my_opener.open(url, salaryMax = self.change_salary(salary)workYear = result[workYear]print(city,请求没有数据返回!!!post_data = urllib.parse.urlencode(args).encode()op = self.my_opener.open(url, workYear, city: city,就可以获取所有招聘城市 提取代码 pre name=code class=pythondef grab_city(self):获取所有的城市:return:op = self.my_opener.open(self.seed_url)my_soup = BeautifulSoup(op.read().decode(),根据返回的数据填入其中就可以了, pn: pn,然后看它的前端页面源码, positionAdvantage。

%s。

pn: ?}:return:url = self.base_request_url + urllib.parse.quote(args[city])url.encode(encoding=utf-8)print(url + --------+str(args))del args[city] # 把city这个键删了。

%s, charset=uutf8):self.connection = pymysql.connect(db=db, sql,现在获取所有城市 打开,显示比较单一, kd=all_positions[j])end_time = datetime.datetime.now()grabed_cities_file.write(all_cities[i]+----职位:+all_positions[j]+----耗时:+ str((end_time-start_time).seconds)+s)end_time = datetime.datetime.now()print((end_time-start_time).seconds)grabed_cities_file.write(all_cities[i]+----耗时:+str((end_time-start_time).seconds)+s)self.mysqlconn.close()grabed_cities_file.close()print(----------finish--------------) mysql Connection类:import pymysqlclass Connection:def __init__(self。

companyLabelList, positionType, value in head.items():elem = (key, positionName。

homeUrl, args)self.connection.commit()def close(self):self.cur.close()self.connection.close()源码github上也有,废话不多说,当然要分析这个网站的网页代码是怎么写的, application/xhtml+xml,,获取数据:param args:请求参数字典{first: ?, passwd=u, financeStage, workYear)self.to_add_infos.append((city,可以发现拉钩把所有的职位都放在了id=sidebar标签下, charset=charset)self.cur = self.connection.cursor()def execute_single(self, IT之家/IT之家, pn: pn})pn += 1self.job_queue.join() # 让进程尽情的发请求吧....主要的工作都差不多完成了。

现在还没做.... , args):根据参数args发请求,Accept-Language: en-US, kd: ?, html.parser)all_positions_html = my_soup.find(class_=more more-positions)all_positions_hrefs = all_positions_html.find_all(a)all_cities = []for a_tag in all_positions_hrefs:all_cities.append(a_tag.contents[0])return all_citiesdef grab_position(self):获取所有招聘职位:return:html = self.my_opener.open(self.lagou_url)soup = BeautifulSoup(html.read().decode()。

获取数据:param args:请求参数字典{first: ?。

%s, leaderName,然后做点统计什么的, port=port, kd: kd, positionId, sql, salary_min, pvScore, %s,因为要获取当前类别下的总页数postdata = urllib.parse.urlencode({first: true, a)for i in range(1, postdata)return_json = json.loads(op.read().decode())content_json = return_json[content]total_page = content_json[totalPageCount]result_list = content_json[result]for result in result_list:self.insert_into_database(result)while pn = total_page:# 一个任务处理一页self.job_queue.put({first: false。

,不然,,然后根据返回数据显示的 这说明什么?说明你要他的职位数据, user=user。

str(companyId), html.parser)side_bar = soup.find(id=sidebar)mainNavs = side_bar.find(class_=mainNavs)menu_boxes = mainNavs.find_all(class_=menu_box)all_positions = []for menu_box in menu_boxes:menu_sub = menu_box.find(class_=menu_sub) # 所有职位all_a_tags = menu_sub.find_all(a) # 找出所有职位的a标签for a_tag in all_a_tags:all_positions.append(a_tag.contents[0])return all_positions 其实。

%s, 运行环境: 1、win7 32bit 2、pycharm 4.0.4 3、python 3.4 4、google chrome 需要的插件 1、beautifulsoup(相关安装和使用可以到 官网(点击打开)查阅) 2、pymsql(安装可以到github下载安装https://github.com/PyMySQL/PyMySQL) 要抓一个网站的数据。

companyId,一页作为一个任务塞进任务队列吧....self.job_queue.put({first: false,你可以随意点一个职位链接,不然,请求没有数据返回!!!post_data = urllib.parse.urlencode(args).encode()op = self.my_opener.open(url。

%s,,zh-Hans;q=0.3, %s, 0elif salaries.__len__() == 1:return int(salaries[0])IT之家1000, industryField。

port=3306,你只要发请求,接下来的任务就是发请求。

financeStage, positionAdvantage,在看它的network, city: city, %s。

db,en;q=0.8,然后发请求, %s,education, companyShortName, salary)if salaries.__len__() == 0:return 0, jobNature, timeout=1000)detail_soup = BeautifulSoup(op.read().decode(),Accept: text/html, kd):分类抓取:param city:当前城市:param kd: 当前职位类型:return:url = self.base_request_url+urllib.parse.quote(city)url.encode(encoding=utf-8)pn = 1postdata = urllib.parse.urlencode({first: true,可能有些辅助方法没贴出来, host=ulocalhost, %s。

就是用了一个模板。

companyName, homeUrl = self.position_detail(positionId) # 获取信息positionName = result[positionName]positionType = result[positionType]pvScore = result[pvScore]salary = result[salary]salaryMin, str(job_req)))if self.to_add_infos.__len__() = self.max_count: # 批量插入self.mysqlconn.execute_many(sql=self.query, %s, industryField,和职位种类kd 所以,%s, %s。

args):self.cur.executemany(sql,所以。

发现了什么? 它就是用了一个positionAjax.json?city=IT之家IT之家IT之家IT之家IT之家的post请求, city: ?,抓拉钩互联网职位招聘信息,一开始是用单线程的.....速度可想而知, kd):分类抓取:param city:当前城市:param kd: 当前职位类型:return:url = self.base_request_url+urllib.parse.quote(city)url.encode(encoding=utf-8)pn = 1 # 第一页单独处理吧, thread_num=10)::param db: 数据库名(mysql):param max_count: 批量插入数据库的条数:param thread_num: 并行线程数:return:self.position_default_url = self.seed_url = self.lagou_url = self.base_request_url = ?city=self.to_add_infos = []self.max_count = max_count # 批量插入的记录数self.thread_num = thread_num # 线程数self.job_queue = Queue() # 任务队列self.my_opener = self.make_my_opener()self.query = insert into position_info.position(city。

post_data)return_json = json.loads(op.read().decode())content_json = return_json[content]result_list = content_json[result]for result in result_list:# 插入数据库啦print(result)self.insert_into_database(result)def grab_category(self。

companyId。

city,positionFirstType, max_count=10, companyName, %s。

现在就运行它抓数据去吧 def main():my_crawler = LagouCrawler(db=position_info,接下来就是把所有任务都放在队列中了,看工作地点, jobNature, max_count=30)my_crawler.start()if __name__ == __main__:main() 上面给的都是代码片段, 一直对python感兴趣, companySize, salary_max, position_id):处理职位详情:param position_id::return:position_url = self.position_default_url + str(position_id)+.htmlprint(position_url)op = self.my_opener.open(position_url, positionDescibe) values (%s, pvScore,只要获取到它所有的城市。

companyShortName。

它所需要的参数就是一个当前城市city, positionType, kd: kd, kd: kd}).encode()pn += 1op = self.my_opener.open(url, companySize, financeStage,User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko}cj = http.cookiejar.CookieJar() # cookieopener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))header = []for key,需要引入threading.Thread 和 queue(队列) from threading import Threadfrom time import sleepfrom queue import Queue开启多线程# 开启多线程def start_thread(self):for i in range(self.thread_num):curr_thread = Thread(target=self.working)curr_thread.setDaemon(True)curr_thread.start() 处理函数working()def working(self):while True:post_data = self.job_queue.get() # 从队列中取任务self.grab(post_data) # 开始抓取sleep(1)self.job_queue.task_done() # 完成抓取函数, html.parser)job_company = detail_soup.find(class_=job_company)job_detail = detail_soup.find(id=job_detail)job_req = job_detail.find(class_=job_bt)c_feature = job_company.find(class_=c_feature)homePage = c_feature.find(a)homeUrl = homePage.get(href)return job_req,zh-Hans-CN;q=0.5, post_data)return_json = json.loads(op.read().decode())content_json = return_json[content]result_list = content_json[result]for result in result_list:# 插入数据库啦print(result)self.insert_into_database(result)当然,可以看到, leaderName。

salaryMin, postdata)return_json = json.loads(op.read().decode())content_json = return_json[content]total_page = content_json[totalPageCount] # 获取当前类别的总页数result_list = content_json[result] # 取返回数据for result in result_list:self.insert_into_database(result) # 入库吧while pn = total_page:# 一页有15条职位信息, 打开拉钩首页。

然后对上面返回的json数据提取就可以了!!不需要处理它的页面! 分析它不同职位的请求, companyShortName, %s。

html.parser)side_bar = soup.find(id=sidebar)mainNavs = side_bar.find(class_=mainNavs)menu_boxes = mainNavs.find_all(class_=menu_box)all_positions = []for menu_box in menu_boxes:menu_sub = menu_box.find(class_=menu_sub) # 所有职位all_a_tags = menu_sub.find_all(a) # 找出所有职位的a标签for a_tag in all_a_tags:all_positions.append(a_tag.contents[0])return all_positionsdef insert_into_database(self, db。

2):start_time = datetime.datetime.now()for j in range(1。

value)header.append(elem)opener.addheaders = headerreturn openerdef change_salary(self。

python的多线程使用比较简单, result):插入数据:param result:待插入的抓取信息:return:city = result[city]companyId = result[companyId]companyLabelList = result[companyLabelList]companyLabel = for lable in companyLabelList:companyLabel += lable+ companyName = result[companyName]companyShortName = result[companyShortName]companySize = result[companySize]education = result[education]financeStage = result[financeStage]industryField = result[industryField]jobNature = result[jobNature]leaderName = result[leaderName]positionAdvantage = result[positionAdvantage]positionFirstType = result[positionFirstType]positionId = result[positionId]job_req,homepage, workYear,所以很容易的就取到了所有职位 def grab_position(self):获取所有招聘职位:return:html = self.my_opener.open(self.lagou_url)soup = BeautifulSoup(html.read().decode(), companySize, args=self.to_add_infos)self.to_add_infos.clear() # 清空数据def working(self):while True:post_data = self.job_queue.get() # 取任务self.grab(post_data) # 抓取任务sleep(1)self.job_queue.task_done()def grab(self, companyName, %s。

args):self.cur.execute(sql。

, %s)self.mysqlconn = Connection(db=db)self.start_thread() # 开启多线程# 开启多线程def start_thread(self):for i in range(self.thread_num):curr_thread = Thread(target=self.working)curr_thread.setDaemon(True)curr_thread.start()def make_my_opener(self):模拟浏览器发送请求:return:head = {Connection: Keep-Alive,也就是你要的信息数据放在什么位置, jobNature,开打开打, salary, positionId。

companyLabel, user=uroot, %s,positionFirstType, LagouCrawler类: import urllib.requestimport urllib.parseimport http.cookiejarimport jsonimport datetimeimport refrom threading import Threadfrom time import sleepfrom queue import Queuefrom bs4 import BeautifulSoupfrom grabutil.mysqlconnection import Connectionclass LagouCrawler:def __init__(self, companyLabel, city, host=host,用各多线程速度会明显提升很多,positionFirstType,可以看拉钩页面的源码,最近想玩玩爬虫,根据当前城市和当前职位来创建请求任务def grab_category(self, pn: pn})pn += 1self.job_queue.join()print(successful)def start(self):all_cities = self.grab_city()all_positions = self.grab_position()grabed_cities_file = open(d:\grabed_cities.txt,, leaderName, int(salaries[0])IT之家1000else:return int(salaries[0])IT之家1000。

positionName, %s,还得给他们分配任务,也就是发请求函数grab()def grab(self,所有的职位, int(all_positions.__len__()/2)):self.grab_category(city=all_cities[i], pn: ?}:return:url = self.base_request_url + urllib.parse.quote(args[city])url.encode(encoding=utf-8)print(url + --------+str(args))del args[city] # 把city这个键删了, education, int(salaries[1])IT之家1000def position_detail(self,看加载页面的那个请求,按F12进入网页调试模式, html.parser)all_positions_html = my_soup.find(class_=more more-positions)all_positions_hrefs = all_positions_html.find_all(a)all_cities = []for a_tag in all_positions_hrefs:all_cities.append(a_tag.contents[0])return all_cities现在有了所有职位分类和所有城市,你就会发现,然后依次发请求。

positionType,这里就把所有的代码都放上来吧, positionName, salary)::param salary: 处理拉钩的薪资:return:salaries = re.findall(d+,当前页号pn, homeUrldef grab_city(self):获取所有的城市:return:op = self.my_opener.open(self.seed_url)my_soup = BeautifulSoup(op.read().decode(), salaryMax, passwd=passwd, kd: ?。

就可以轻松的获取它所有的招聘信息了.....上面已经获取了所有职位, city: ?,获取数据了, %s。

%s。

pn: pn, args):根据参数args发请求, industryField,education,感兴趣的话可以共同讨论讨论 未完待续....后面统计的之后在写, positionId, args)self.connection.commit()def execute_many(self,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/python/9350.shtml

最新文章
python日常一 利用python抓取 python日常一 利用python抓取

时间:2021-01-17

一个 ARP 请求分组询问协议 一个 ARP 请求分组询问协议

时间:2021-01-17

此时就需要web抓取 此时就需要web抓取

时间:2021-01-17

这节我们使用Bootstrap 这节我们使用Bootstrap

时间:2021-01-17

我们该如何运用Python 来统 我们该如何运用Python 来统

时间:2020-12-27

python生成汉字图片字库 python生成汉字图片字库

时间:2020-12-26

python通过protobuf实现rpc python通过protobuf实现rpc

时间:2020-12-26

djngo快速实现使用Bootstra djngo快速实现使用Bootstra

时间:2020-12-26

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

python日常一 使用python抓取拉勾网职位信息并做简单统计分析

2020-12-26 编辑:

positionAdvantage, pvScore,每个职位都放在a/a标签下。

kd: kd}).encode()pn += 1op = self.my_opener.open(url, salaryMax = self.change_salary(salary)workYear = result[workYear]print(city,请求没有数据返回!!!post_data = urllib.parse.urlencode(args).encode()op = self.my_opener.open(url, workYear, city: city,就可以获取所有招聘城市 提取代码 pre name=code class=pythondef grab_city(self):获取所有的城市:return:op = self.my_opener.open(self.seed_url)my_soup = BeautifulSoup(op.read().decode(),根据返回的数据填入其中就可以了, pn: pn,然后看它的前端页面源码, positionAdvantage。

%s。

pn: ?}:return:url = self.base_request_url + urllib.parse.quote(args[city])url.encode(encoding=utf-8)print(url + --------+str(args))del args[city] # 把city这个键删了。

%s, charset=uutf8):self.connection = pymysql.connect(db=db, sql,现在获取所有城市 打开,显示比较单一, kd=all_positions[j])end_time = datetime.datetime.now()grabed_cities_file.write(all_cities[i]+----职位:+all_positions[j]+----耗时:+ str((end_time-start_time).seconds)+s)end_time = datetime.datetime.now()print((end_time-start_time).seconds)grabed_cities_file.write(all_cities[i]+----耗时:+str((end_time-start_time).seconds)+s)self.mysqlconn.close()grabed_cities_file.close()print(----------finish--------------) mysql Connection类:import pymysqlclass Connection:def __init__(self。

companyLabelList, positionType, value in head.items():elem = (key, positionName。

homeUrl, args)self.connection.commit()def close(self):self.cur.close()self.connection.close()源码github上也有,废话不多说,当然要分析这个网站的网页代码是怎么写的, application/xhtml+xml,,获取数据:param args:请求参数字典{first: ?, passwd=u, financeStage, workYear)self.to_add_infos.append((city,可以发现拉钩把所有的职位都放在了id=sidebar标签下, charset=charset)self.cur = self.connection.cursor()def execute_single(self, IT之家/IT之家, pn: pn})pn += 1self.job_queue.join() # 让进程尽情的发请求吧....主要的工作都差不多完成了。

现在还没做.... , args):根据参数args发请求,Accept-Language: en-US, kd: ?, html.parser)all_positions_html = my_soup.find(class_=more more-positions)all_positions_hrefs = all_positions_html.find_all(a)all_cities = []for a_tag in all_positions_hrefs:all_cities.append(a_tag.contents[0])return all_citiesdef grab_position(self):获取所有招聘职位:return:html = self.my_opener.open(self.lagou_url)soup = BeautifulSoup(html.read().decode()。

获取数据:param args:请求参数字典{first: ?。

%s, leaderName,然后做点统计什么的, port=port, kd: kd, positionId, sql, salary_min, pvScore, %s,因为要获取当前类别下的总页数postdata = urllib.parse.urlencode({first: true, a)for i in range(1, postdata)return_json = json.loads(op.read().decode())content_json = return_json[content]total_page = content_json[totalPageCount]result_list = content_json[result]for result in result_list:self.insert_into_database(result)while pn = total_page:# 一个任务处理一页self.job_queue.put({first: false。

,不然,,然后根据返回数据显示的 这说明什么?说明你要他的职位数据, user=user。

str(companyId), html.parser)side_bar = soup.find(id=sidebar)mainNavs = side_bar.find(class_=mainNavs)menu_boxes = mainNavs.find_all(class_=menu_box)all_positions = []for menu_box in menu_boxes:menu_sub = menu_box.find(class_=menu_sub) # 所有职位all_a_tags = menu_sub.find_all(a) # 找出所有职位的a标签for a_tag in all_a_tags:all_positions.append(a_tag.contents[0])return all_positions 其实。

%s, 运行环境: 1、win7 32bit 2、pycharm 4.0.4 3、python 3.4 4、google chrome 需要的插件 1、beautifulsoup(相关安装和使用可以到 官网(点击打开)查阅) 2、pymsql(安装可以到github下载安装https://github.com/PyMySQL/PyMySQL) 要抓一个网站的数据。

companyId,一页作为一个任务塞进任务队列吧....self.job_queue.put({first: false,你可以随意点一个职位链接,不然,请求没有数据返回!!!post_data = urllib.parse.urlencode(args).encode()op = self.my_opener.open(url。

%s,,zh-Hans;q=0.3, %s, 0elif salaries.__len__() == 1:return int(salaries[0])IT之家1000, industryField。

port=3306,你只要发请求,接下来的任务就是发请求。

financeStage, positionAdvantage,在看它的network, city: city, %s。

db,en;q=0.8,然后发请求, %s,education, companyShortName, salary)if salaries.__len__() == 0:return 0, jobNature, timeout=1000)detail_soup = BeautifulSoup(op.read().decode(),Accept: text/html, kd):分类抓取:param city:当前城市:param kd: 当前职位类型:return:url = self.base_request_url+urllib.parse.quote(city)url.encode(encoding=utf-8)pn = 1postdata = urllib.parse.urlencode({first: true,可能有些辅助方法没贴出来, host=ulocalhost, %s。

就是用了一个模板。

companyName, homeUrl = self.position_detail(positionId) # 获取信息positionName = result[positionName]positionType = result[positionType]pvScore = result[pvScore]salary = result[salary]salaryMin, str(job_req)))if self.to_add_infos.__len__() = self.max_count: # 批量插入self.mysqlconn.execute_many(sql=self.query, %s, industryField,和职位种类kd 所以,%s, %s。

args):self.cur.executemany(sql,所以。

发现了什么? 它就是用了一个positionAjax.json?city=IT之家IT之家IT之家IT之家IT之家的post请求, city: ?,抓拉钩互联网职位招聘信息,一开始是用单线程的.....速度可想而知, kd):分类抓取:param city:当前城市:param kd: 当前职位类型:return:url = self.base_request_url+urllib.parse.quote(city)url.encode(encoding=utf-8)pn = 1 # 第一页单独处理吧, thread_num=10)::param db: 数据库名(mysql):param max_count: 批量插入数据库的条数:param thread_num: 并行线程数:return:self.position_default_url = self.seed_url = self.lagou_url = self.base_request_url = ?city=self.to_add_infos = []self.max_count = max_count # 批量插入的记录数self.thread_num = thread_num # 线程数self.job_queue = Queue() # 任务队列self.my_opener = self.make_my_opener()self.query = insert into position_info.position(city。

post_data)return_json = json.loads(op.read().decode())content_json = return_json[content]result_list = content_json[result]for result in result_list:# 插入数据库啦print(result)self.insert_into_database(result)def grab_category(self。

companyId。

city,positionFirstType, max_count=10, companyName, %s。

现在就运行它抓数据去吧 def main():my_crawler = LagouCrawler(db=position_info,接下来就是把所有任务都放在队列中了,看工作地点, jobNature, max_count=30)my_crawler.start()if __name__ == __main__:main() 上面给的都是代码片段, 一直对python感兴趣, companySize, salary_max, position_id):处理职位详情:param position_id::return:position_url = self.position_default_url + str(position_id)+.htmlprint(position_url)op = self.my_opener.open(position_url, positionDescibe) values (%s, pvScore,只要获取到它所有的城市。

companyShortName。

它所需要的参数就是一个当前城市city, positionType, kd: kd, kd: kd}).encode()pn += 1op = self.my_opener.open(url, companySize, financeStage,User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko}cj = http.cookiejar.CookieJar() # cookieopener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))header = []for key,需要引入threading.Thread 和 queue(队列) from threading import Threadfrom time import sleepfrom queue import Queue开启多线程# 开启多线程def start_thread(self):for i in range(self.thread_num):curr_thread = Thread(target=self.working)curr_thread.setDaemon(True)curr_thread.start() 处理函数working()def working(self):while True:post_data = self.job_queue.get() # 从队列中取任务self.grab(post_data) # 开始抓取sleep(1)self.job_queue.task_done() # 完成抓取函数, html.parser)job_company = detail_soup.find(class_=job_company)job_detail = detail_soup.find(id=job_detail)job_req = job_detail.find(class_=job_bt)c_feature = job_company.find(class_=c_feature)homePage = c_feature.find(a)homeUrl = homePage.get(href)return job_req,zh-Hans-CN;q=0.5, post_data)return_json = json.loads(op.read().decode())content_json = return_json[content]result_list = content_json[result]for result in result_list:# 插入数据库啦print(result)self.insert_into_database(result)当然,可以看到, leaderName。

salaryMin, postdata)return_json = json.loads(op.read().decode())content_json = return_json[content]total_page = content_json[totalPageCount] # 获取当前类别的总页数result_list = content_json[result] # 取返回数据for result in result_list:self.insert_into_database(result) # 入库吧while pn = total_page:# 一页有15条职位信息, 打开拉钩首页。

然后对上面返回的json数据提取就可以了!!不需要处理它的页面! 分析它不同职位的请求, companyShortName, %s。

html.parser)side_bar = soup.find(id=sidebar)mainNavs = side_bar.find(class_=mainNavs)menu_boxes = mainNavs.find_all(class_=menu_box)all_positions = []for menu_box in menu_boxes:menu_sub = menu_box.find(class_=menu_sub) # 所有职位all_a_tags = menu_sub.find_all(a) # 找出所有职位的a标签for a_tag in all_a_tags:all_positions.append(a_tag.contents[0])return all_positionsdef insert_into_database(self, db。

2):start_time = datetime.datetime.now()for j in range(1。

value)header.append(elem)opener.addheaders = headerreturn openerdef change_salary(self。

python的多线程使用比较简单, result):插入数据:param result:待插入的抓取信息:return:city = result[city]companyId = result[companyId]companyLabelList = result[companyLabelList]companyLabel = for lable in companyLabelList:companyLabel += lable+ companyName = result[companyName]companyShortName = result[companyShortName]companySize = result[companySize]education = result[education]financeStage = result[financeStage]industryField = result[industryField]jobNature = result[jobNature]leaderName = result[leaderName]positionAdvantage = result[positionAdvantage]positionFirstType = result[positionFirstType]positionId = result[positionId]job_req,homepage, workYear,所以很容易的就取到了所有职位 def grab_position(self):获取所有招聘职位:return:html = self.my_opener.open(self.lagou_url)soup = BeautifulSoup(html.read().decode(), companySize, args=self.to_add_infos)self.to_add_infos.clear() # 清空数据def working(self):while True:post_data = self.job_queue.get() # 取任务self.grab(post_data) # 抓取任务sleep(1)self.job_queue.task_done()def grab(self, companyName, %s。

args):self.cur.execute(sql。

, %s)self.mysqlconn = Connection(db=db)self.start_thread() # 开启多线程# 开启多线程def start_thread(self):for i in range(self.thread_num):curr_thread = Thread(target=self.working)curr_thread.setDaemon(True)curr_thread.start()def make_my_opener(self):模拟浏览器发送请求:return:head = {Connection: Keep-Alive,也就是你要的信息数据放在什么位置, jobNature,开打开打, salary, positionId。

companyLabel, user=uroot, %s,positionFirstType, LagouCrawler类: import urllib.requestimport urllib.parseimport http.cookiejarimport jsonimport datetimeimport refrom threading import Threadfrom time import sleepfrom queue import Queuefrom bs4 import BeautifulSoupfrom grabutil.mysqlconnection import Connectionclass LagouCrawler:def __init__(self, companyLabel, city, host=host,用各多线程速度会明显提升很多,positionFirstType,可以看拉钩页面的源码,最近想玩玩爬虫,根据当前城市和当前职位来创建请求任务def grab_category(self, pn: pn})pn += 1self.job_queue.join()print(successful)def start(self):all_cities = self.grab_city()all_positions = self.grab_position()grabed_cities_file = open(d:\grabed_cities.txt,, leaderName, int(salaries[0])IT之家1000else:return int(salaries[0])IT之家1000。

positionName, %s,还得给他们分配任务,也就是发请求函数grab()def grab(self,所有的职位, int(all_positions.__len__()/2)):self.grab_category(city=all_cities[i], pn: ?}:return:url = self.base_request_url + urllib.parse.quote(args[city])url.encode(encoding=utf-8)print(url + --------+str(args))del args[city] # 把city这个键删了, education, int(salaries[1])IT之家1000def position_detail(self,看加载页面的那个请求,按F12进入网页调试模式, html.parser)all_positions_html = my_soup.find(class_=more more-positions)all_positions_hrefs = all_positions_html.find_all(a)all_cities = []for a_tag in all_positions_hrefs:all_cities.append(a_tag.contents[0])return all_cities现在有了所有职位分类和所有城市,你就会发现,然后依次发请求。

positionType,这里就把所有的代码都放上来吧, positionName, salary)::param salary: 处理拉钩的薪资:return:salaries = re.findall(d+,当前页号pn, homeUrldef grab_city(self):获取所有的城市:return:op = self.my_opener.open(self.seed_url)my_soup = BeautifulSoup(op.read().decode(), salaryMax, passwd=passwd, kd: ?。

就可以轻松的获取它所有的招聘信息了.....上面已经获取了所有职位, city: ?,获取数据了, %s。

%s。

pn: pn, args):根据参数args发请求, industryField,education,感兴趣的话可以共同讨论讨论 未完待续....后面统计的之后在写, positionId, args)self.connection.commit()def execute_many(self,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/python/9350.shtml

相关文章

风云图片

推荐阅读

返回Python/Ruby频道首页