【Python爬虫实战】为啥学Python,BOSS告诉你
张世润,Python社区专栏作者
博客:https://zhuanlan.zhihu.com/pythoncoder
目标:获取BOSS直聘上武汉Python工资情况
http://www.zhipin.com/job_detail/?query=Python&scity=101200100&source=2
环境:Python3.5,Pycharm
需要提前安装的库:requests,BeautifulSoup4,lxml
1、首先打开目标网页,寻找我们需要的headers
F12——F5——Network,招聘网站反爬还是有的,有次爬拉钩就被封了。。
2、寻找我们需要的信息
可以发现工资“9K-16K”在“<span class="red">9K-16K</span>”下,待会使用BeautifulSoup4就会很简单。
现在准备工作都已经做完了,下面开始写代码了。
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)
得到结果
这只是抓取了一页的数据,有15个,其实数据太少,但是该如何进行多页爬取?粗略看看工资基本在10K左右,那么运营岗位工资如何。
只需修改url就可以,结果为:
简直没法比,作为一个文科生,不会什么特长,想养活自己还是学点技术吧。
完整代码 https://github.com/zhangslob/-Python-Python-BOSS-/blob/master/test.py
小问题:为什么直接使用“print(b.get_text())”会出错??如何进行多页爬取?想对这两组数据进行可视化,如何处理?
(这问题我真的不会)
希望更多朋友可以交流,用半天写下这个篇文章,有多半时间都是在错误和查询文档中度过的,有人交流会不会好些呢~~
推荐阅读:
快速上手 - Requests 2.10.0 文档:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html#id2
Beautiful Soup 4.2.0 文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
免费爬虫视频获取: 关注公众号,“Python爱好者社区”,回复“爬虫”即可获取。
为大家提供与Python相关的最新技术和资讯。
长按指纹 > 识别图中二维码 > 添加关注