查看原文
其他

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

2017-03-31 张世润 Python爱好者社区

张世润,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爱好者社区


为大家提供与Python相关的最新技术和资讯。


长按指纹 > 识别图中二维码 > 添加关注



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存