Python爬虫系列之二:爬取2018公务员招考职位信息

1 开发场景
  • 爬取公务员招考职位(2018)信息,积累知识、锻炼动手能力等等。

2 详细描述
  • 基于 Python 爬取 华图教育 官网有关公务员招考职位信息数据。
  • 通过request请求数据,利用bs4进行解析;由于实现较简单,请(bu)参(zai)考(zhui)代(su)码。

3 具体代码
# coding: utf-8
# ### 爬取浙江公务员职位信息

import urllib
import pandas as pd

from bs4 import BeautifulSoup


# ### 1 爬取页面

api = 'http://zw.huatu.com'
base='/2018/'
url=api+base
header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3236.0 Safari/537.36'}
request = urllib.request.Request(url,headers=header)
response = urllib.request.urlopen(request).read()
content=BeautifulSoup(response, 'lxml')


# ### 2 内容解析
# - 省/市 : 对应 URL [32个]

areas_txt=content.find_all('p', attrs={'id':'ydiqu'})[0]
area_metas_lis=[]
counter=0
for i in areas_txt.find_all('a', attrs={'target':'_blank'}):
    url=api+i.get_attribute_list('href')[0][2:]
    area=i.get_text()
    counter+=1
    area_metas_lis.append([counter,area,url])

df=pd.DataFrame(area_metas_lis, columns=['no','area', 'url'])

# ### 3 以浙江为例,通过省份查询招聘单位及具体信息访问途径(URL)

query_area='浙江'
df[df.area==query_area]

url2=df[df.area==query_area].url.values[0]
request2 = urllib.request.Request(url2,headers=header)
response2 = urllib.request.urlopen(request2).read()
content2=BeautifulSoup(response2, 'lxml')
tmp2=content2.find_all('table', attrs={'cellspacing':'0','width':'100%'})[0]


unit_lis=[] # 存储职位列表
for i in tmp2.find_all('a'):
    t_url=api+'/2018'+i.get_attribute_list('href')[0][2:]
    unit_lis.append([i.get_text().strip(),t_url]) # strip 去除空格

unit_df=pd.DataFrame(unit_lis,columns=['unit_name','url'])


# ### 4 查询所有部门的招聘岗位等详细信息

'''
获取岗位详细信息
url :
    访问路径
'''
def get_post_metas(url):
    tmp_request = urllib.request.Request(url,headers=header)
    tmp_response = urllib.request.urlopen(tmp_request).read()
    tmp_content=BeautifulSoup(tmp_response, 'lxml')

    td_lis=[i.get_text() for i in tmp_content.find_all('td')]
    internal=[]
    for i in range(len(td_lis)):
        if i%10==0: # 生成间隔区间
            internal.append([i,i+10])

    row_lis=[]
    for lt,rt in internal: # 根据间隔区间,将数据分行
        row_lis.append(td_lis[lt:rt])

    return row_lis

post_metas_lis=[]

for unit_name,url in unit_lis: # 循环,加工招聘单位所招岗位详细信息
    post_metas_lis+=get_post_metas(url)


# 将 list 转换为 DataFrame 格式

# '部门名称','用人用司','职位名称','要求专业','招考人数','报考人数','历年分数线','历年竞争比','录取概率','对比'
post_metas_df=pd.DataFrame(post_metas_lis, columns=['unit_name','employee_unit','post_name','professional','person_num','person_num2','view','view2','detail','compare'])
post_metas_df[post_metas_df.unit_name=='中国保险监督管理委员会宁波监管局']


# 5 保存数据信息
post_metas_df.to_csv('./post_metas.csv')

4 数据结果

  • 省 / 市区及访问路径
    shengshi

  • 招聘单位及访问路径信息
    units

  • 招聘岗位详细信息
    details


5 下载链接

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很好的问题!以下是一些 Python 爬虫开源项目,可以用来爬取多种网站,包括微信、淘宝、豆瓣、知乎、微博等。 1. Scrapy:一个高效的Python爬虫框架,可用于从多个网站获取数据。 2. Beautiful Soup:一个用于解析HTML和XML文档的Python库,可用于爬取网站。 3. Selenium:一个自动化测试工具,也可用于模拟用户行为进行网站爬取。 4. Requests:一个Python HTTP库,可用于向网站发送请求并获取响应。 5. PyQuery:一个用于解析HTML文档的Python库,类似于jQuery。 6. Pyspider:一个强大的爬虫框架,可用于爬取多个网站。 7. Crawlera:一个智能代理池,可用于绕过网站的反爬虫机制。 8. Frontera:一个高效的分布式爬虫框架,可用于爬取大规模数据。 9. Newspaper:一个Python库,可用于从新闻网站中提取文章和元数据。 10. Feedparser:一个Python库,可用于解析RSS和Atom新闻源。 11. Grab:一个Python爬虫框架,可用于爬取多个网站。 12. ParseHub:一个基于云端的数据提取工具,可用于从网站中提取结构化数据。 13. Webbot:一个用于模拟用户行为的Python库,可用于爬取网站。 14. PySpider:一个基于分布式架构的Python爬虫框架,可用于爬取多个网站。 15. Grablib:一个Python爬虫框架,可用于爬取多个网站。 16. Python-Goose:一个Python库,可用于从新闻网站中提取文章和元数据。 17. Scrapy-redis:一个基于Redis的分布式爬虫框架,可用于爬取多个网站。 18. Scrapy-splash:一个基于Splash的JavaScript渲染爬虫框架,可用于爬取JavaScript动态生成的网页。 19. Scrapy-UserAgents:一个Scrapy中的中间件,可用于随机更换用户代理。 20. Scrapy-Proxies:一个Scrapy中的中间件,可用于随机更换代理IP。 21. Scrapy-rotating-proxies:一个Scrapy中的中间件,可用于随机更换代理IP。 22. Scrapy-selenium:一个Scrapy中的中间件,可用于使用Selenium进行网站爬取。 23. Scrapy-fake-useragent:一个Scrapy中的中间件,可用于随机更换用户代理。 希望这些开源项目能够帮助你进行网站爬取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xsimah

创作不易,感谢客官的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值