Python爬虫入门,抓取应届生求职网北京地区所有职位
2016-11-26 12:00
190 查看
我也是刚刚入门Python爬虫,写这个一方面给和我一样的初学者一个参考,另一方面也希望有高手可以给我指导,一个人学习总是有些无聊的。其实任何语言的学习,我觉得最好的方式就是实战,看过太多理论,也不如实际撸一遍代码来的痛快,所以我就不去一一介绍那些用到的库啊函数啊什么的,网上资料一找一大把,我主要讲一讲整个过程中的思路吧。
今天我们要抓取的就是应届生求职网北京地区的所有职位(http://www.yingjiesheng.com/beijing-morejob-1.html),这是第一页的网址,从网址上就可以猜到后面的数字代表了工作的页数,所以很容易想到根据网址遍历所有的网页,抓取其中所有的职位。其实最后的大目标是要抓取所有的职位及其详细信息,我们先完成第一步,抓取所有的职位及其详细信息的链接。
第一步,我们先看看能不能直接用urlopen函数下载网页,需不需要设置用户代理等等。
import urllib2
url='http://www.yingjiesheng.com/beijing-morejob-1.html'
print urllib2.urlopen(url).read()
结果如下图所示
真是喜忧参半啊,高兴的是该网页不需要设置任何用户代理就可以直接下载,不开森的是下载的网页里面中文部分变成了一些奇奇怪怪的东西,所以编码肯定有问题。从下载的网页的第5行我们可以看到charset='gbk',原来网页的编码是gbk,而Python默认的是utf-8,所以肯定有问题。这个时候就要用decode-encode大法了,修改代码为
结果如下图所示
好的,这下中文显示正常了,可以开始愉快地抓取网页内容了。查看网页源码如下
第二步是网页内容提取。我们发现所有的职位及其链接都在标签td下,class=item1类的a标签下,其中链接是href属性,职位名称是a的文字内容,所以可以利用BeautifulSoup非常方便地抓取目标内容。
不过需要注意的是,网页中给出的职位链接相当一部分是相对链接,这样的话后面想下载职位具体内容时就会不方便,所以需要加一个判断来补全相对链接。最后一步就是存储了,将所有结果写入一个csv文件即可,最后的整体代码如下所示
下载结果如下图所示
这样就完成了我们第一步的目标,爬取到了所有的职位及其链接,不过这个爬虫问题还是挺多的,主要以下几个
1 职位其实是在不停地更新的,用页数作为遍历的依据很可能导致爬取职位不全,用下一页的链接可以解决这个问题。
2 爬虫执行两次之后就被封ip了,所以有必要在爬取的时候也增加延迟或者使用多个代理ip。
不过没有关系,接下来我们会进一步修改这个爬虫,直到它完成我们最终的目标。
注:代码仅供学习交流使用,如有错误请多指正。
PS:第一次发格式来来回回改了好几遍,为什么写的东西总自己进了代码里啊……
今天我们要抓取的就是应届生求职网北京地区的所有职位(http://www.yingjiesheng.com/beijing-morejob-1.html),这是第一页的网址,从网址上就可以猜到后面的数字代表了工作的页数,所以很容易想到根据网址遍历所有的网页,抓取其中所有的职位。其实最后的大目标是要抓取所有的职位及其详细信息,我们先完成第一步,抓取所有的职位及其详细信息的链接。
第一步,我们先看看能不能直接用urlopen函数下载网页,需不需要设置用户代理等等。
import urllib2
url='http://www.yingjiesheng.com/beijing-morejob-1.html'
print urllib2.urlopen(url).read()
结果如下图所示
真是喜忧参半啊,高兴的是该网页不需要设置任何用户代理就可以直接下载,不开森的是下载的网页里面中文部分变成了一些奇奇怪怪的东西,所以编码肯定有问题。从下载的网页的第5行我们可以看到charset='gbk',原来网页的编码是gbk,而Python默认的是utf-8,所以肯定有问题。这个时候就要用decode-encode大法了,修改代码为
url='http://www.yingjiesheng.com/beijing-morejob-1.html' print urllib2.urlopen(url).read().decode('gbk','ignore').encode('utf-8')
结果如下图所示
好的,这下中文显示正常了,可以开始愉快地抓取网页内容了。查看网页源码如下
第二步是网页内容提取。我们发现所有的职位及其链接都在标签td下,class=item1类的a标签下,其中链接是href属性,职位名称是a的文字内容,所以可以利用BeautifulSoup非常方便地抓取目标内容。
from bs4 import BeautifulSoup content=urllib2.urlopen(url).read().decode('gbk','ignore').encode('utf-8') bs=BeautifulSoup(content,'html.parser') res=bs.find_all("td",{"class":"item1"}) site=item.find('a').attrs['href'].encode('gbk','ignore') job=item.find('a').text.encode('gbk','ignore')
不过需要注意的是,网页中给出的职位链接相当一部分是相对链接,这样的话后面想下载职位具体内容时就会不方便,所以需要加一个判断来补全相对链接。最后一步就是存储了,将所有结果写入一个csv文件即可,最后的整体代码如下所示
__author__='CD' # -*- coding: utf-8 -*- import urllib2 from bs4 import BeautifulSoup import csv url="http://www.yingjiesheng.com/beijing-morejob-" csvfile = file('links.csv', 'wb') writer = csv.writer(csvfile) for i in xrange(1,356): url_total=url+str(i)+".html" print 'Now downloading page '+str(i) content=urllib2.urlopen(url_total).read().decode('gbk','ignore').encode('utf-8') bs=BeautifulSoup(content,'html.parser') res=bs.find_all("td",{"class":"item1"}) for item in res: row=[] site=item.find('a').attrs['href'].encode('gbk','ignore') if "http" in site: row.append(site) else: site="http://yingjiesheng.com"+site row.append(site) row.append(item.find('a').text.encode('gbk','ignore')) writer.writerow(row)
下载结果如下图所示
这样就完成了我们第一步的目标,爬取到了所有的职位及其链接,不过这个爬虫问题还是挺多的,主要以下几个
1 职位其实是在不停地更新的,用页数作为遍历的依据很可能导致爬取职位不全,用下一页的链接可以解决这个问题。
2 爬虫执行两次之后就被封ip了,所以有必要在爬取的时候也增加延迟或者使用多个代理ip。
不过没有关系,接下来我们会进一步修改这个爬虫,直到它完成我们最终的目标。
注:代码仅供学习交流使用,如有错误请多指正。
PS:第一次发格式来来回回改了好几遍,为什么写的东西总自己进了代码里啊……
相关文章推荐
- Python爬虫框架Scrapy 学习笔记 10.2 -------【实战】 抓取天猫某网店所有宝贝详情
- 用python实现的抓取腾讯视频所有电影的爬虫
- 基于python实现的抓取腾讯视频所有电影的爬虫
- Python爬虫抓取贴吧所有标题
- Python爬虫入门-fiddler抓取手机新闻评论
- Python爬虫框架Scrapy 学习笔记 10.3 -------【实战】 抓取天猫某网店所有宝贝详情
- python爬虫 抓取一个网站的所有网址链接
- Python爬虫从入门到放弃(十九)之 Scrapy爬取所有知乎用户信息(下)
- python3 [爬虫入门实战] 爬虫之selenium 模拟QQ登陆抓取好友说说内容(暂留)
- python爬虫scrapy框架,对于智联招聘职位进行抓取
- Python入门-编写抓取网站图片的爬虫-正则表达式
- 【Python爬虫基础】抓取知乎页面所有图片
- 基于python实现的抓取腾讯视频所有电影的爬虫
- Python爬虫实战一 | 抓取取校花网的所有妹子
- 用python实现的抓取腾讯视频所有电影的爬虫
- 【Python】爬虫入门--抓取网站图片
- 网络爬虫--python抓取豆瓣同城北京地区活动信息
- python爬虫 抓取图片入门
- [置顶] python3 scrapy 入门级爬虫 爬取数万条拉勾网职位信息
- Python3学习(34)--简单网页内容抓取(爬虫入门一)