Python网络爬虫_规则

本文介绍了如何使用Python的Requests库进行网络数据抓取,包括基本概念、安装、主要方法、get()函数详解、Response对象和Request对象、常见异常处理以及实战案例,如京东商品、搜索引擎搜索、图片下载和IP查询等。
摘要由CSDN通过智能技术生成

目标掌握定向网络数据爬取和网页解析的基本能力

 课程链接:Python网络爬虫与信息提取_中国大学MOOC(慕课) (icourse163.org)

Python程序编写常用开发环境:

文本工具类IDE集成工具类IDE
IDLEPyCharm
Notepad++Wing
Sublime TextPyDev & Eclipse
Vim & EditVisual Studio
AtomAnaconda & Spyder
Komodo EditCanopy

一、Requests库的入门

1、Requests库的安装:“以管理员身份运行”cmd,执行 pip install requests(Windows平台)

2、Requests库的7个主要方法:

方法说明
requests.request()构造一个请求,支撑以下各方法的基础方法
requests.get()获取HTML网页的主要方法,对应于HTTPGET
requests.head()获取HTML网页头信息的方法,对应于HTTPHEAD
requests.post()HTML网页提交POST请求的方法,对应于HTTPPOST
requests.put()HTML网页提交PUT请求的方法,对应于HTTPPUT
requests.patch()HTML网页提交局部修改请求,对应于HTTPPATCH
requests.delete()HTML页面提交删除请求,对应于HTTPDELETE

3、Requests库的get()方法

语法格式:requests.get(url, params=None, **kwargs)

                  ∙ url :拟获取页面的url链接

                  ∙ params :url中的额外参数,字典或字节流格式,可选

                  ∙ **kwargs:12个控制访问的参数

参数说明
params字典或字节序列,作为参数增加到url
data 字典、字节序列或文件对象,作为Request的内容
jsonJSON格式的数据,作为Request的内容
headers字典,HTTP定制头
cookies字典或CookieJar,Request中的cookie
auth元组,支持HTTP认证功能
files字典类型,传输文件
timeout 设定超时时间,秒为单位
proxies 字典类型,设定访问代理服务器,可以增加登录认证
allow_redirectsTrue/False,默认为True,重定向开关
streamTrue/False,默认为True,获取内容立即下载开关
verify
True/False ,默认为 True ,认证 SSL 证书开关
cert 本地SSL证书路径

4、Requests的2个重要对象:Response、Request

Response对象包含服务器返回的所有信息,也包含请求的Request信息

5、Response对象的属性
属性说明
r.status_code
HTTP请求的返回状态,200表示连接成功,404表示失败
r.text
HTTP响应内容的字符串形式,即,url对应的页面内容
r.encodingHTTP header中猜测的响应内容编码方式
r.apparent_encoding
从内容中分析出的响应内容编码方式(备选编码方式)
r.contentHTTP响应内容的二进制形式Response
注意: r.encoding :如果 header 中不存在 charset ,则认为编码为 ISO‐8859‐ 1
           r.text 根据 r.encoding 显示网页内容
           r.apparent_encoding :根据网页内容分析出的编码方式
           可以看作是 r.encoding 的备选
6、requests库的异常
异常说明
requests.ConnectionError网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPErrorHTTP错误异常
requests.URLRequiredURL缺失异常
requests.TooManyRedirects超过最大重定向次数,产生重定向异常
requests.ConnectTimeout连接远程服务器超时异常
requests.Timeout请求URL超时,产生超时异常
7、爬取网页的通用代码框架

简易方法:使用r.raise_for_status()在方法内部判断r.status_code是否等于200,不需要增加额外的if语句,该语句便于利用try‐except进行异常处理。

8、HTTP协议

HTTP (  Hypertext Transfer Protocol,超文本传输协议 )是一个基于“请求与响应”模式的、无状态的应用层协议 ,该协议采用URL( URL 是通过 HTTP 协议存取资源的 Internet 路径,一个 URL 对应一个数据资源)作为定位网络资源的标识, URL 格式: http://host[:port][path]
    host : 合法的 Internet 主机域名或 IP 地址
    port : 端口号,缺省端口为 80
    path : 请求资源的路径
二、Requests库网络爬虫实战(5个实例)
实例1:京东商品页面的爬取
import requests
url = "https://item.jd.com/100057771880.html?bbtf=1"
try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text)
except:
    print("爬取失败")

实例2:亚马逊商品页面的爬取

#亚马逊不支持user-agent为python中requests库发出的爬取
# import requests
# url = "https://www.amazon.cn/dp/B097F43FQL?ref_=Oct_DLandingS_D_6b0b07a2_6"
# try:
#     r = requests.get(url)
#     r.raise_for_status()
#     r.encoding = r.apparent_encoding
#     print(r.text)
# except:
#     print("爬取失败")

#在爬取时写入一个键值对,将user-agent修改
import requests
url = "https://www.amazon.cn/dp/B097F43FQL?ref_=Oct_DLandingS_D_6b0b07a2_6"
try:
    kv = {'user-agent':'Mozilla/5.0'}
    r = requests.get(url,headers=kv)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text)
except:
    print("爬取失败")

实例3:百度360搜索关键词提交


#百度搜索
import requests
url = "http://www.baidu.com/s" 
keyword = "Java" #关键词
try:
    kv = {'wd':keyword} #wd表示搜索引擎接口前面的标识
    r = requests.get(url, params = kv)
    print(r.request.url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(len(r.text))
except:
    print("爬取失败")

#360搜索    
# import requests
# url = "http://www.so.com/s" 
# keyword = "Python" #关键词
# try:
#     kv = {'q':keyword} #q表示搜索引擎接口前面的标识
#     r = requests.get(url, params = kv)
#     print(r.request.url)
#     r.raise_for_status()
#     r.encoding = r.apparent_encoding
#     print(len(r.text))
# except:
#     print("爬取失败")

实例4:网络图片的爬取和存储

import requests
import os
root ="E://桌面//photo//"
url = "http://img0.dili360.com/pic/2023/05/24/646dd606de72f0k35279632_t.jpg@!rw15"
path = root + url.split('/')[-1]
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:
    print("爬取失败")

实例5:IP地址归属地的自动查询

import requests
url = "http://m.ip138.com/ip.asp?ip="
try:
    r = requests.get(url+'202.204.80.112')
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[-500:])
except:
    print("爬取失败")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pljj~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值