c爬虫抓取网页数据(最简单的过程可以用如下代码表示:importurllib2request=urllib2.Request())
优采云 发布时间: 2022-02-01 14:30c爬虫抓取网页数据(最简单的过程可以用如下代码表示:importurllib2request=urllib2.Request())
概念
爬虫是网页的采集。
通常,在获取的网页中存在到其他网页的路径,称为超链接。然后,通过这样的路径可以获取更多的其他网页,就像蜘蛛在网上爬行一样,所以俗称爬虫。
爬虫的工作原理类似于浏览器浏览网页。它是一种请求/返回模式,即客户端向服务器发出请求访问某个页面(请求),服务器返回客户端请求的内容(响应)。URL是代表互联网上每个文件的唯一标志,也就是我们所说的网址。客户端通过 URL 向特定网页发送请求。最简单的过程可以用以下代码表示:
import urllib2request = urllib2.Request("")#构造请求请求 response = urllib2.urlopen(request)#发送请求并得到响应打印 response.read()#使用read()来获取返回的内容并打印出Http协议的POST和GET
对于简单的静态网页,这样就足够了,可以顺利获取html文本。
但对于这个日新月异的互联网来说,这东西根本就不够用。首先要考虑的是动态网页,它需要我们动态地向它传递参数。例如,在登录时,我们需要提交用户名和密码等表单信息,以便我们获取更多信息。这需要我们在构造请求时向服务器传递更多信息。
说到传递参数,就不得不说一下HTTP协议与服务器交互的方式了。HTTP协议有六种请求方法,分别是get、head、put、delete、post、options,其中最基本的四种是GET、POST和PUT、DELET。我们知道 URL 地址是用来描述网络上的资源的。HTTP中的GET、POST、PUT、DELETE对应了查询、修改、添加、删除这四种操作。对于爬虫中的数据传输,使用 POST 和 GET。我们来看看GET和POST的区别:
1.GET提交的数据会放在URL后面,URL和传输数据用?分隔,参数用&连接
2.GET方法提交的数据大小是有限制的(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
3.GET方法需要使用Request.QueryString获取变量的值,POST方法使用Request.Form获取变量的值。
4.GET方式提交数据会带来安全问题。例如,通过 GET 方法提交数据时,用户名和密码会出现在 URL 上。如果页面可以被缓存或者其他人可以访问机器,则可以从访问历史记录中获取用户的账号和密码。下面介绍两种提交方法。
POST方法导入urllib2值 ={“username”:“”,“password”:“XXXX”}data = urllib.urlencode(values)url=":///my/mycsdn"request = urllib2.@ >请求(url,data)response = urllib2.urlopen(request)print response.read()
可以看出,该方法首先将要提交的信息构造成一个数据,然后连同URL一起构造请求对象。
GET方法 import urllib2 import urllibvalues ={"username":"","password":"XXXX"}data = urllib.urlencode(values)url = ""geturl = url +"?"+ datarequest = urllib2. Request(geturl)response = urllib2.urlopen(request)print response.read()
可以看到GET方式是直接在URL后面加参数
设置标题
即便如此,还是有一些网站不被允许访问,会出现识别问题。这时候,为了真正的伪装成浏览器,我们还需要在构造请求的时候设置一些Headers属性。打开浏览器查看网页标题,可以看到如下内容:
我们可以根据自己的需要选择某些属性来构造请求,比如下面使用了user-agent和referer。
headers ={'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)','Referer':''}request = urllib2.Request (网址,标题=标题)
User-agent全称为用户代理,是向网站提供所用浏览器的类型和版本、操作系统、浏览器内核等信息的标志,是伪装成浏览器。真正的浏览器提供这个属性是为了方便网站为用户提供更好的展示和体验。Referer 显示当前页面来自哪个页面。可以用来防止防盗链。服务器将识别 headers 中的 referer 是否是它自己。如果没有,某些服务器将不会响应。
有了以上的基础知识,就可以开始了解和实现真正的爬虫了。