Pyhon网络爬虫

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pyhon网络爬虫相关的知识,希望对你有一定的参考价值。

就像学驾照你需要一台车,幸运的是我们的爬虫在上一篇已经选择了Pyhton,恭喜你,这是一辆自动档的车,相信你可以愉快轻松的上路

我们学习第一步:requests库

我们的爬虫如何进入网络,路在哪里?

   URL便是我们的入口,网络上的资源全部都可以通过URL链接得到

   URL的格式 

我们利用requests库可以轻松,通过URL访问网络

 (1)安装requests库 Windows 平台 运行 cmd,执行pip install requests

        (安装出问题,请检查配置环境变量)

(2)尝试第一个程序,比如访问百度

1 import requests                
2 url = "http://www.baidu.com"
3 re = requests.get(url)
4 print(re.text[0:1000])

上面就是一个最基本的爬虫,我们只是用了几行代码就实现了这个功能,是不是轻松愉快?

上面的程序通过get方法,成功的访问了百度,并获得了页面的信息,先不用了解这些信息的含义,我们先重点关注requests的get方法,这些方法如果你对HTTP协议稍微有所了解的话,你应该就猜到这些方法帮你实现了相应的http协议,你仅需调用这些方法就可以。                               

重点分析requests.get()方法:

r = requests.get(url) 构造一个向服务器请求资源的Request对象,返回一个包含服务器资源的Response对象

当然还可以带其他参数

requests.get(url, params=None, **kwargs)

url : 拟获取页面的url链接
? params : url中的额外参数,字典或字节流格式,可选
? **kwargs: 12个控制访问的参数

我们可以看一下这个第二个参数的用法,我们打开百度输入博客园搜索,我们在浏览器看到是这样一个链接

https://www.baidu.com/s?wd=博客园

当然后面可能还会跟很多参数,我们先忽略

1 import requests
2 params = {"wd":"博客园"}
3 url = "http://www.baidu.com/s"
4 re = requests.get(url,params)
5 print(re.text[0:1000]

 

我们可以看到返回了百度搜索博客园的信息

我们还要再看一下返回的对象有哪些属性

Response 属性 说明

r.status_code HTTP请求的返回状态,200表示连接成功,404表示失败

r.text HTTP响应内容的字符串形式,即,url对应的页面内容
r.encoding 从HTTP header中猜测的响应内容编码方式
r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)
r.content HTTP响应内容的二进制形式

我们必须要考虑到一些情况一个是如果请求错误该如何?(错误会有很多原因url错误,无法连接)

第二是编码的问题,知道正确的编码编码我们才能后续更好的去处理数据

r.encoding:如果header中不存在charset,则认为编码为ISO‐8859‐1
r.text根据r.encoding显示网页内容
r.apparent_encoding:根据网页内容分析出的编码方式
可以看作是r.encoding的备选

所以需要对上面的属性了解并合理使用

我们修改下代码:

 

 1 import requests
 2 params = {"wd":"博客园"}
 3 url = "http://www.baidu.com/s"
 4 try:   
 5     re = requests.get(url,params)
 6     re.raise_for_status()
 7     re.encoding = re.apparent_encoding
 8     print(re.text[0:1000])
 9     
10 except:
11     print("产生错误")

 

以下是requests库的几个组要方法

方法              说明
requests.request()         构造一个请求,支撑以下各方法的基础方法
requests.get()           获取html网页的主要方法,对应于HTTP的GET
requests.head()        获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post()         向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put()           向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch()       向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete()      向HTML页面提交删除请求,对应于HTTP的DELETE

以上是关于Pyhon网络爬虫的主要内容,如果未能解决你的问题,请参考以下文章

pyhon学习目录

Pyhon 爬虫框架 looter

scrapy按顺序启动多个爬虫代码片段(python3)

scrapy主动退出爬虫的代码片段(python3)

Pyhon网络编程-socketserver

网页爬虫之二手车价格爬虫