美文网首页遇见更好的自己
Python爬取数据之Requests库

Python爬取数据之Requests库

作者: JairusTse | 来源:发表于2018-12-30 01:13 被阅读1次

爬虫三步走包括爬取数据、解析数据和保存数据,Python强大之处就是每一步都提供了强大的库,我们只要使用对应的库,就能把网站中想要的数据爬取下来。第一步爬取数据,最常用的就是Requests库。Requests库主要的功能是模拟浏览器向网站发起HTTP请求,把整个网页的HTML代码爬取下来,下面介绍下Requests库的使用流程。

安装

pip install requests 

导入

import requests

主要方法

requests.request()  //构造一个请求
requests.get()      //GET方式请求
requests.head()     //获取HTML网页头信息
requests.post()     //POST方式请求
requests.put()      //PUT方式请求
requests.patch()    //PATCH方式请求
requests.delete()   //DELETE方式请求

一个HTTP请求通常包括URL和请求方法,URL指的是统一资源定位符,可以理解成一个网络上的资源;而常用的请求方法有get、post、put、delete、patch,分别代表对资源的获取、创建、创建和更新、删除、部分更新。head指只获取头信息。

一个HTTP方法有安全和幂等两个属性,其中安全指的是不修改资源的HTTP方法;幂等指的是无论调用多少次,结果仍然相同。

下面是一些常用的HTTP方法的安全性和幂等性:

HTTP Method Idempotent Safe
GET yes yes
HEAD yes yes
PUT yes no
POST no no
DELETE yes no
PATCH no no

更详细的可查看: RESTful手册

使用

import requests
url = 'https://www.douban.com/group/topic/130361854/'
r = requests.get(url)

返回

r.status_code #状态码
r.text #返回对象的文本内容
r.content #返回对象的二进制形式
r.encoding #编码方式
r.apparent_encoding #响应内容编码方式

更多状态码查看: HTTP状态码

封装通用方法

  • 定义函数
  • 设置超时
  • 异常处理
import requests

url = 'https://www.douban.com/group/topic/130361854/'

#定义函数
def getHTML(url):
    try:
        r = requests.get(url, timeout=20) #设置超时
        return r.text
    except: #异常处理
        return "产生异常"

if __name__ == '__main__':
    print(getHTML(url)) #调用函数

参数和headers

一般网页的反爬机制是通过检查请求头信息实现的,当发现要爬取的网页headers跟一般的请求头不一致时,我们需要添加headers来达到模拟浏览器发起请求,才能成功获取数据。有时候也需要传参数,比如翻页参数等。

常见的请求头
  • Accept:
  • Accept-Encoding:
  • Accept-Language:
  • Connection:
  • Cookie:
  • Host:
  • Referer:
  • User-Agent:
#设置header和传参数
import requests

url = "https://www.lagou.com/jobs/positionAjax.json?city=%E5%B9%BF%E5%B7%9E&needAddtionalResult=false"
data = {
    "first": "false",
    "pn": 1,
    "kd": "python",
}
header = {
    "Cookie": "JSESSIONID=ABAAABAAAIAACBI2D68CE59E04E9B916073CE597D576077; WEBTJ-ID=20180928001706-1661bd1cc3d192-07081ccd396238-1132685e-1440000-1661bd1cc43ad; _ga=GA1.2.1398948892.1538065026; user_trace_token=20180928001659-c2f7d144-c270-11e8-a746-525400f775ce; LGUID=20180928001659-c2f7d48f-c270-11e8-a746-525400f775ce; X_HTTP_TOKEN=49a65ea9a50465953839a839bd605f07; _putrc=F69826498ED2888D; login=true; unick=%E8%B0%A2%E5%B2%B3; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22166a479151b22c-02b9afb9c550b-3468780b-1440000-166a479151c217%22%2C%22%24device_id%22%3A%22166a479151b22c-02b9afb9c550b-3468780b-1440000-166a479151c217%22%2C%22props%22%3A%7B%22%24latest_utm_source%22%3A%22m_cf_cpt_baidu_pc%22%7D%7D; LG_LOGIN_USER_ID=098d626900ab0bf0bfb563ee060f7bb5c56b489a328b6a09; TG-TRACK-CODE=index_code; _gat=1; LGSID=20181216131822-01c80f36-00f2-11e9-8d2a-5254005c3644; PRE_UTM=; PRE_HOST=; PRE_SITE=; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2F; _gid=GA1.2.1593998340.1544937506; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1544621337; index_location_city=%E5%B9%BF%E5%B7%9E; SEARCH_ID=0fe5797c95e2425f950da090a3f514aa; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1544937595; LGRID=20181216131951-36e9801b-00f2-11e9-9315-525400f775ce",
    "Referer": "https://www.lagou.com/jobs/list_python?city=%E5%B9%BF%E5%B7%9E&cl=false&fromSearch=true&labelWords=&suginput=",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
}

result = requests.post(url, data=data, headers=header)

爬虫协议

搜索引擎的蜘蛛机器人(spider)对网站进行爬行并索引网页,并随后通过关键字搜索为网站带来流量,但是有些私密的或是不适宜公开的信息或数据不希望被爬取,这时候就需要robots.txt了,通过它对搜索引擎给予指示,限制搜索引擎对特定内容的访问。

  • 什么是爬虫协议:告诉爬虫机器人哪些页面可以抓取,哪些页面不可以抓取
  • 如何查看爬虫协议:在网站根域名后加上robots.txt,如淘宝的爬虫协议:https://www.taobao.com/robots.txt
  • 了解更多爬虫协议: robots协议
robots.txt语法:
User-agent:     适用的搜索引擎
Disallow: /     禁止访问的目录
Allow:  /       允许访问目录
Disallow:  /*blocked  禁止爬取带blocked的文件和目录  
Disallow:  /*.php$    禁止爬取php结尾的文件 
robots.txt实例:
拦截所有的机器人:   
User-agent: *    适用于所有机器人  
Disallow: /  

允许所有的机器人:   
User-agent: *   
Allow:  /

针对百度搜索引擎的爬取协议:
User-agent:  Baiduspider   适用于百度机器人  
Allow:  /article    允许百度机器人爬取article目录  
Allow:  /oshtml  
Disallow:  /product/    禁止爬取product目录  
Disallow:  /*blocked    禁止爬取带blocked的文件和目录  
Disallow:  /*.php$      禁止爬取php结尾的文件  

需要注意的是:

  • 如果指定了某个机器人的规则,对于所有机器人的规则对该机器人就不起作用。
  • robots.txt 不是命令,也不是防火墙,只是一个“君子协议”, 无法阻止恶意闯入。

下一篇将会进行实战,爬取一些知名的网站。看看它们的反爬机制是怎样的,能不能爬取到我们想要的数据。

相关文章

网友评论

    本文标题:Python爬取数据之Requests库

    本文链接:https://www.haomeiwen.com/subject/xwmmlqtx.html