requests

requests.get(url)
通常使用requests库的get方法对网站进行爬取。

Response对象属性

get方法返回的为response对象,其具有以下属性:

r.status_code 返回状态,200连接成功,其余失败
r.text 响应内容的字符串形式
r.encoding 从HTTP header中猜测的响应内容编码方式
r.apparent_encoding 从HTTP内容分析出的编码方式
r.content HTTP响应的二进制形式

Requests异常处理

在使用requests库进行爬取时,会出现各种各样的错误,要对出现错误的情况进行处理,确保代码顺利运行。
ConnectionError
HTTPError
URLRequires
TooManyRedirects
ConnectTimeout
Timeout
raise_for_status() ##最常用,若status_code不是200,则此函数发挥作用。

Requests库主要方法

HTTP即超文本传输协议。
URL是通过HTTP协议获取存取资源的路径,一个URL对应一个数据资源。

requests库除了常用的get方法外,还可以通过request方法,并指明采用的method进行爬虫。
常用的method如下:
GET
HEAD 头部
POST 附加
PUT 覆盖
PATCH 更新
DELETE 删除
Python网络爬虫与信息提取——第一周笔记_字段
requests.request(method,url,**kwargs)
params/data/json/headers/cookies/auth/files/timeout/proxies/allow_resirects/stream/verify/cert

网络爬虫的尺寸

小规模网页:Requests
中规模网站:Scrapy
大规模全网:定制
互联网不是法外之地,爬虫的不当使用,可能会造成一系列不良影响,因此对网络爬虫采取如下两种方法进行限制:

  • 来源审查 判断协议头User-Agent字段
  • 发布公告:Robots协议

Robots协议

网络爬虫排除标准
作用:告诉网站哪些页面可以抓取,哪些不可以
形式:网站根目录下的robots.txt文件
Python网络爬虫与信息提取——第一周笔记_字段_02
类人行为可不参考Robots协议

实例——商品页面爬取

通过查看request.headers的User-Agent字段,可以查看当前访问的来源。可以更改字段,模拟浏览器
修改方式如下:

kv={'user-agent':'Mozilla/5.0'}
r=requests.get(url,headers=kv)

其中Mozila/5.0是主流浏览器常用的字段名

百度/360搜索自动提交

使用爬虫进行搜索并获得结果
在使用搜索引擎的url进行搜索时,首先要获得该引擎的关键词提交接口。
在这里我打开bing进行一次搜索,并根据跳转后的链接得到他的提交接口。
Python网络爬虫与信息提取——第一周笔记_搜索_03
因此使用下面的构造方法即可

kv={'q':'Python'}
r=requests.get{"http://www.cn.bing.com/search",params=kv}
print(r.request.url) ##查看url已经发生改变

网络图片的爬取和存储

首先要获取图片在网络中存储的路径
之后创建图片保存的路径,爬取文件并进行写操作。具体代码如下

import requests
import os

def getHTMLImg(url,root,path):
    try:
        if not os.path.exists(root):  //增强鲁棒性
            os.mkdir(root)
        if not os.path.exists(path):
            r=requests.get(url)
            with open(path,'wb') as f:
                f.write(r.content)  //二进制形式写入
                f.close()
                print("文件保存成功")
        else:
            print("文件已存在")
    except:
        return "爬取异常"

if __name__=="__main__":
    root="E://pachong//"
    url="https://pic4.zhimg.com/80/v2-c9160bfcb4527872a9d46052e53653e4_720w.jpg"
    path=root+url.split('/')[-1]
    getHTMLImg(url,root,path)
 

IP地址归属地自动查询

这里利用了IP地址查询网站IP138实现,还是通过IP138网站获得网络接口。
Python网络爬虫与信息提取——第一周笔记_get方法_04

Tips

对于网站这种需要提交的,有两种方式。
一种方式是通过get方法中的params设定参数值。一种则是直接将参数内容作为url进行提交。