python玩转爬虫第一弹
爬虫相关操作步骤
一、确定需要爬取网页信息的url(统一资源定位符),爬取网页时需要根据url作为地址索引,得到所需采集的信息。
二、在浏览器中打开所需爬取的网页,找到所需要采集信息的位置,并通过查看网页源代码的方式找到采集信息在网页代码中的层次,根据此为依据获取信息。
三、使用Python抓取网页信息的基本思路如一二所示,当然,完整的爬虫程序还应当涉及网页源码的缓存、采集信息的储存等一系列操作,这些操作会在后面的文档中给出步骤。
Python用于爬虫的库有很多,同时还有Scrapy框架也是用于爬虫程序的编写的,在下面的介绍中我会先对一些库进行介绍,在介绍完库及其相关函数后,再对scrapy框架进行更深入的介绍。
接下来介绍几个常用的用于Python爬虫程序编写的库和包以及库中一些相关函数的用法和含义。
第一步,先介绍如何使用urllib, urllib2, re, bs4, lxml等库进行静态网页的源代码提取和解析操作。
1 import urllib #导入urllib库
2 import urllib2 #导入urllib2库
注意:使用python导入相关库之前,必须保证在Python的安装目录site-packges中已经安装了相应的库,可以通过上面的语句来进行测试,运行语句,看是否报错。
在这里,推荐安装Anaconda集成包,因为在这个Python的编译环境下,已经为我们提前安装好了很多常用的库,这样就免去了在网上寻找库资源和安装库的步骤。当然,如果在Anaconda中也不存在的库,还是得需要按照“pip install文件名”的格式进行安装。
4 print response.read() #使用read方法将得到的源代码打印出来
注:在这里,我们先对urlopen函数进行一个简单的介绍。
函数格式:urlopen(url, data, timeout)
其中,第一个参数url即为URL(统一资源定位符,通常可以理解为我们常说的网址),第二个参数data是访问URL时要传送的数据,第三个参数timeout是设置的超时时间。从我们上面给出的代码可以看到,第二和第三个参数都是可以不传送的,那么此时data默认为None,timeout则默认为socket._GLOBAL_DEFAULT_TIMEOUT,但第一个参数url是必须传送的。
上面给出的代码是最简单的提取网页源代码的方式。
接下来,我们尝试构建Request,通过构建一个Request类的实例,在该实例中我们给定需要传入的url, data等内容,然后将这个request请求传入到urlopen函数中。
1 import urllib
2 import urllib2
4 response = urllib2.urlopen(request)#现在的urlopen函数传入上一步构建的request实例
5 print response.read()
接着,考虑第二个参数data的设置和传输。很多网页都是需要提供数据输入的,比如说最常见的登录注册时,就需要用户提供用户名和密码,才能进入相应的网页中。
数据传送的两种方式:POST和GET数据传送。
POST数据传送方式:
1 import urllib
2 import urllib2
3 values = {“username”: “xxxx”, “password”:“xxx”} #字典数据格式,用来给data参数赋值
4 data = urllib2.urlencoed(values) #使用urlencode函数将上面的values以url编码
5 request = urllib2.Request(“http://www.weibo.com”, data) #构造含有url和data参数的request实例
6 response = urllib2.urlopen(request)
7 print response.read()
GET数据传送方式:#可以直接将参数写在网址上面,即将url和data参数进行整合,写在一起,然后传送到Request类中,用于构建一个带有url和data参数的request实例。
1 import urllib
2 import urllib2
3 values[‘username’] = “xxx”
4 values[‘password’] = “xxx”
5 data = urllib2.urlencode(values) #对values进行编码
6 url = “http://passport.csdn.net/account/login”
7 geturl = url + “?” + data #将url和data参数利用正则表达式整合在一起
8 request = urllib2.Request(geturl) #根据geturl来构建request实例
9 response = urllib2.urlopen(request)
10 print response.read()
上面的介绍部分已经可以实现简单的爬虫操作,但还远远不够,对于大部分网页而言,我们还需要进行进一步的深入探讨。
领取专属 10元无门槛券
私享最新 技术干货