【Python爬虫实战】为啥学Python,BOSS告诉你

浏览: 2228

目标:获取BOSS直聘上武汉Python工资情况

url=“【武汉Python招聘】2017年武汉Python最新人才招聘信息-BOSS直聘

image.png

环境:Python3.5,Pycharm

需要提前安装的库:requests,BeautifulSoup4,lxml

1、首先打开目标网页,寻找我们需要的headers

F12——F5——Network,招聘网站反爬还是有的,有次爬拉钩就被封了。。

image.png

2、寻找我们需要的信息

可以发现工资“9K-16K”在“<span class="red">9K-16K</span>”下,待会使用BeautifulSoup4就会很简单。

image.png

现在准备工作都已经做完了,下面开始写代码了。

3、写代码

import requests
from bs4 import BeautifulSoup

首先引入模块

url = 'http://www.zhipin.com/job_detail/?query=Python&scity=101200100&source=2'
headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language':'zh-CN,zh;q=0.8',
'Host':'www.zhipin.com',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
}

在请求加上头信息,伪装成浏览器访问

a = requests.get(url,headers=headers)
soup = BeautifulSoup(a.text,'lxml')

下一步使用requests获取网页信息,定制请求头。关于 BeautifulSoup的解析器,官方这样说

BeautifulSoup 第一个参数应该是要被解析的文档字符串或是文件句柄,第二个参数用来标识怎样解析文档.如果第二个参数为空,那么Beautiful Soup根据当前系统安装的库自动选择解析器,解析器的优先数序: lxml, html5lib, Python标准库.在下面两种条件下解析器优先顺序会变化:
  • 要解析的文档是什么类型: 目前支持, “html”, “xml”, 和 “html5”
  • 指定使用哪种解析器: 目前支持, “lxml”, “html5lib”, 和 “html.parser”

现在我们已经获得了我们想要的网页数据,下一步就是从中找出工资情况。

先前一经发现工资的位置<span class="red">9K-16K</span>

b = soup.find_all("span",class_="red")
print(b)
[<span class="red">10K-15K</span>, <span class="red">9K-16K</span>, <span class="red">10K-20K</span>, <span class="red">10K-20K</span>, <span class="red">6K-12K</span>, <span class="red">8K-16K</span>, <span class="red">15K-30K</span>, <span class="red">10K-15K</span>, <span class="red">8K-11K</span>, <span class="red">8K-16K</span>, <span class="red">15K-16K</span>, <span class="red">12K-18K</span>, <span class="red">10K-15K</span>, <span class="red">8K-15K</span>, <span class="red">8K-15K</span>]

结果中包含有标签,BeautifulSoup提供一种很简洁的办法 get_text()

C:\Python35\python.exe D:/Backup/桌面/77/爬虫.py
Traceback (most recent call last):
File "D:/Backup/桌面/77/爬虫.py", line 18, in <module>
print(b.get_text())
AttributeError: 'ResultSet' object has no attribute 'get_text'

可是直接使用却出错,提示“'ResultSet' object has no attribute 'get_text'”

只好换一种方法

b = soup.find_all("span",class_="red")
#print(b)
for i in b:
c = i.get_text("|", strip=True)
print(c)

得到结果

image.png

这只是抓取了一页的数据,有15个,其实数据太少,但是该如何进行多页爬取?粗略看看工资基本在10K左右,那么运营岗位工资如何。

只需修改url就可以,结果为:

image.png

简直没法比,作为一个文科生,不会什么特长,想养活自己还是学点技术吧。

完整代码 https://github.com/zhangslob/-Python-Python-BOSS-/blob/master/test.py

image.png

小问题:为什么直接使用“print(b.get_text())”会出错??如何进行多页爬取?想对这两组数据进行可视化,如何处理?

(这问题我真的不会)

希望更多朋友可以交流,用半天写下这个篇文章,有多半时间都是在错误和查询文档中度过的,有人交流会不会好些呢~~

推荐阅读:快速上手 - Requests 2.10.0 文档Beautiful Soup 4.2.0 文档

推荐 3
本文由 崔斯特呀 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

cookies的问题比较坑爹
人生苦短,我用Python

要回复文章请先登录注册