Python网络爬虫学习笔记(第一周)

Pyhon网络爬虫学习

Request库入门

Request是目前公认的最好用的爬虫库

安装方法

  1. pip install requests
  2. 测试库:import requests

7个主要方法

  1. .request()注意没有s,用于构造一个请求,且支撑以下所有方法
  2. .get()获取HTML页面的主要方法,对应于HTTP的get
  3. .head()获取HTML页面头信息的方法,对应于HTTP的HEAD
  4. .post()向网页提交POST请求
  5. .put() 向网页提交PUT请求
  6. .patch()向网页提交局部修改请求
  7. .delete()向网页提交删除请求

其实requests只有request一个基本方法,其他方法只是封装了request

Requests异常
1. ConnectionError  网络连接异常
2. HTTPError        http协议上错
3. URLRequired      url缺失造成的异常
4. TooManyRedirects 超出最大重定向次数(爬复杂网站可能会碰到)
5. ConnectTimeout   连接远程服务器超时(仅仅是与远程服务器连接过程超时)
6. Timeout          请求url超时(从发起请求到获得内容的时间超出预定时间)

r.raise_for_status()如果返回状态吗不是200产生httperror,否则返回true

Response对象

r = requests.get("http://www.baidu.com")
>>> type(r)         #显示r的类型为Response对象
>>> r.status_code       #返回状态码,200代表访问成功,404代表失败
>>> r.headers           #显示网页头部信息
>>> r.text              #打印url对应的页面内容(字符串形式)
>>> r.encoding          #从页面的header中charset字段获取的编码方式
>>> r.apparent_encoding #页面编码方式(从内容中分析出的编码方式)
>>> r.content           #页面相应内容的二进制形式

如果header中不存在charset,则默认编码为ISO-8859-1,不能解析中文哦^_^
r.encoding = r.apparent_encoding

爬虫代码框架

import requests

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()    #如果状态码不是200,产生HttpError异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "ERROR"

if __name__ == "__main__":
    url = "http://www.baidu.com"
    print(getHTMLText(url))

HTTP协议

HTTP,Hypertext Transfer Protocol,超文本传输协议
HTTP是一个基于“请求与响应”模式的、无状态的应用层协议
用户发起请求,服务器相应——请求与响应
无状态是指本次与下一次访问无关联
采用url作为定位网络资源的标示

url格式:http://host[:port][path]
1. host是主机域名或者ip地址
2. port是端口号,缺省端口80
3. path是请求资源的内部路径

HTTP对资源的6种操作
  1. GET请求获取URL位置的资源
  2. HEAD头部信息
  3. POST请求向url位置的资源后附加新的数据,不改变现有资源内容
  4. PUT请求向url位置存储一个资源,会覆盖掉url位置资源,未提交的会被删除
  5. PATCH请求局部更新url位置的资源
  6. DELETE请求删除url位置的资源

request()

requests.request(method,url,**kwargs)
  1. method:请求方式,对应get/put/post等。6种+”OPTIONS”(获取能与服务器交互的方式)
  2. kwargs,代表13个控制访问参数
13个控制访问参数
  1. params: 字典或字节序列,作为参数增加到url中
  2. data: 字典、字节序列、文件对象,作为Request内容
  3. json: 作为Request内容
  4. headers: 字典,定制http的协议头,比如修改’user-agent’字段来模拟浏览器
  5. cookies: 字典或cookiejar,Request中的cookie
  6. auth: 元组,支持http认证功能
  7. files: 字典类型,传输文件
fs = {'file':open('data.xls','rb')}
r = requests.request('POST','http://www.baidu.com',files=fs)
  1. timeout: 设置超时时间,以秒为单位
  2. proxies: 字典类型,设置访问代理服务器,可以增加登录认证,隐藏自己的访问信息
  3. allow_redirects: 默认为true,是否允许重定向
  4. stream: 默认true,url内容是否立即下载
  5. verify: 默认true,认证ssl证书开关
  6. cert: 本地ssl证书路径

get()

简单获取一个网页r = requests.get(url)
1. 用于构造一个向服务器请求资源的Request对象
2. 返回了一个包含了爬虫返回的全部内容的Response对象

requests.get(url,params=None,**kwargs)
  1. url是链接
  2. (可选)params是url中的额外参数,字典或者字节流格式
  3. (可选)除了params的12个控制访问参数
requests.head(url,**kwargs)

post()

requests.post(url,data=None,json=None,**kwargs)

除了data和json的11个控制访问参数

put()

url,data,kwargs

patch()

url,data,kwargs

delete()

url,kwargs


网络爬虫的“盗亦有道”

 网络爬虫的尺寸

  1. 小尺寸,只是用来爬取网页,requests库就可以
  2. 中尺寸,用于爬取网站,对速度敏感的,使用Scrapy库
  3. 大尺寸,用于爬取全网,常见于搜索引擎,定制开发

服务器限制网络爬虫的方法
1. 来源审查,限制http的user-agent字段来拒绝网络爬虫
2. 发布Robots协议

Robots协议

Robots Exclusion Standard 网络爬虫排除标准
在网站根目录下robots.txt文件
http://www.jd.com/robots.txt来访问京东的robots协议
无robots协议则表示允许所有爬虫不限制爬取其网站资源
约束性:建议遵守,如果不遵守,可能会存在法律风险
类人行为可不遵守robots协议

User-agent: *       #*代表所有
Disallow: /         #/代表根目录

本周实例

京东商品爬取

import requests
url = "https://item.jd.com/5327260.html?utm_source=kong&utm_medium=zssc&utm_campaign=t_1000027280_85&utm_term=1410a462-637a-41ac-8af2-8bfcdc2a31ff-p_1999-pr_249-at_85&jd_pop=1410a462-637a-41ac-8af2-8bfcdc2a31ff&abt=0"
try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text)
except:
    print("ERROR")

亚马逊商品爬取

import requests
url = "https://www.amazon.cn/dp/B07524LHMT/ref=cngwdyfloorv2_recs_0/461-5225947-5332108?pf_rd_m=A1AJ19PSB66TGU&pf_rd_s=desktop-2&pf_rd_r=QV7CXXJ1V0N1QT70KV7N&pf_rd_r=QV7CXXJ1V0N1QT70KV7N&pf_rd_t=36701&pf_rd_p=19fc3fc8-b320-45dc-a7e8-b4ecd543eea8&pf_rd_p=19fc3fc8-b320-45dc-a7e8-b4ecd543eea8&pf_rd_i=desktop"
try:
    kv = {'user-agent':'Mozilla/5.0'}   #Mozilla是一个标准的浏览器
    r = requests.get(url,headers=kv)    #更改头文件的user-agent字段
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[1000:2000])
except:
    print("ERROR")

百度/360搜索关键字提交

百度关键词接口http://www.baidu.com/s?wd=keyword
360关键词搜索借口http://www.so.com/s?q=keyword

import requests
keyword = "Python"
try:
    kv = {'wd':keyword}     #构造关键词键值对
    r = requests.get("http://www.baidu.com/s",params=kv)
    print(r.request.url)    #打印url地址
    r.raise_for_status()
    print(len(r.text))
except:
    print("ERROR")

网络图片的爬取和存储

待补充

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值