Python爬取数据之Requests库!

爬虫三步走包括爬取数据、解析数据和保存数据,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 MethodIdempotentSafeGETyesyesHEADyesyesPUTyesnoPOSTnonoDELETEyesnoPATCHnono

更详细的可查看: RESTful手册

进群:960410445

使用

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 不是命令,也不是防火墙,只是一个“君子协议”, 无法阻止恶意闯入。

猜你喜欢

转载自blog.csdn.net/qq_42156420/article/details/85914113