从零开始的python爬虫教程(Day02)

 

 

爬虫的概念

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。(来源于百度百科)

爬虫的过程有三步:

  1. 获取网页
  2. 获取信息
  3. 保存信息

爬虫常用库

请求库
urllib
requests
解析库
lxml
BeautifulSoup
自动化
Selenium
框架
pyspider
scrapy

Requests库基础用法

01 安装

在命令行中输入:

pip install requests

即可。

如果速度太慢,可以使用中科大的源:

pip install --index https://pypi.mirrors.ustc.edu.cn/simple requests

安装完成之后,可以在python命令行输入“import requests”检验。

02 GET请求基本使用

(1) 基本操作

import requests

response = requests.get('https://httpbin.org/get')
print(response.text)

请求结果为:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.23.0", 
    "X-Amzn-Trace-Id": "Root=1-5f107d75-db1210ba8a626de146e579e8"
  }, 
  "origin": "***.***.***.**", 
  "url": "https://httpbin.org/get"
}

这里的 requests.get 是用get方法请求网页。

get请求返回了一个response对象,这个对象包含了请求的类型、状态码、请求类型、cookie、内容。

以上实例中response.text是获取返回对象中的文字部分内容。

以下为get请求的部分用法

import requests

response = requests.get('https://httpbin.org/get')
print(response)
print(type(response)) # response 类型
print(response.text) # 内容
print(response.content) # 二进制内容(可用于获取视频、图片)
print(response.status_code) # 状态码
print(response.cookies) # cookie
# response
<Response [200]>
# type(response)
<class 'requests.models.Response'>
# response.text
{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.23.0", 
    "X-Amzn-Trace-Id": "Root=1-5f108010-4f6006d11ae9755b42e9c0ec"
  }, 
  "origin": "182.116.195.12", 
  "url": "https://httpbin.org/get"
}
# response.content
b'{\n  "args": {}, \n  "headers": {\n    "Accept": "*/*", \n    "Accept-Encoding": "gzip, deflate", \n    "Host": "httpbin.org", \n    "User-Agent": "python-requests/2.23.0", \n    "X-Amzn-Trace-Id": "Root=1-5f108010-4f6006d11ae9755b42e9c0ec"\n  }, \n  "origin": "182.116.195.12", \n  "url": "https://httpbin.org/get"\n}\n'
# response.status_code
200
# response.cookies
<RequestsCookieJar[]>

(2) 携带参数

我们在浏览网页的时候经常会发现申请的网页需要携带参数。例如:

https://www.baidu.com/s?wd=%E7%88%AC%E8%99%AB

其中wd就是携带的一个参数。

requests可以携带参数进行get请求,用法是将参数以字典的方式传入。

import requests

param = {
    'language':'python',
    'date':2020
    }
response = requests.get('https://httpbin.org/get', params = param)
print(response)
print(response.text)

结果为:

<Response [200]>
{
  "args": {
    "date": "2020", 
    "language": "python"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.23.0", 
    "X-Amzn-Trace-Id": "Root=1-5f10f4ab-70ef76c5173e4e72b835dfef"
  }, 
  "origin": "***.***.***.**", 
  "url": "https://httpbin.org/get?language=python&date=2020"
}

可以看到,申请的url和参数language、date构成了一个url。

https://httpbin.org/get?language=python&date=2020

(3) 添加请求头

我们如果使用上面的方式去请求一些网页,会发现有些网页无法请求到我们在网页看到的内容。

其中一个原因是,它识别出请求方并不是一个浏览器,而是一个python程序,可以看到上面程序的结果,请求头"User-Agent"是"python-requests/2.23.0"。

故此我们可以使用下面的方法进行请求头的添加:

import requests

param = {
    'language':'python',
    'date':2020
    }

header = {'user-agent':'Mozilla/5.0'}

response = requests.get('https://httpbin.org/get', params = param, headers = header)
print(response)
print(response.text)

这样请求出来的请求头就是Mozilla/5.0。

03 POST请求基本使用

post请求的用法与get相似,只需要将requests.get换成requests.post就行了。

它还有一些特殊的用法,例如文件的上传等等:

import requests

file = {
    'file':'01.png'
    }

response = requests.post('https://httpbin.org/post', files = file)
print(response)
print(response.text)
<Response [200]>
{
  "args": {}, 
  "data": "", 
  "files": {
    "file": "01.png"
  }, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "146", 
    "Content-Type": "multipart/form-data; boundary=92058415dea9dc33df31608265fffb6f", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.23.0", 
    "X-Amzn-Trace-Id": "Root=1-5f10f8f9-0d04b1f17e223a03f35f9751"
  }, 
  "json": null, 
  "origin": "***.***.***.**", 
  "url": "https://httpbin.org/post"
}
posted @ 2020-07-17 09:06  12218  阅读(72)  评论(0编辑  收藏  举报