Python网络爬虫基本库

Python网络爬虫基本库

  • 1、网络爬虫概述
    • 1.1、什么是网络爬虫
    • 1.2、网络爬虫的工作原理
    • 1.3、网络爬虫的分类与应用
  • 2、urllib库
    • 2.1、urllib.request模块
    • 2.2、urllib.parse模块
    • 2.3、urllib.error模块
    • 2.4、urllib.robotparser模块
  • 3、requests库
    • 3.1、发送请求:Request
      • 3.1.1、发送请求的方法
      • 3.1.2、Get请求
      • 3.1.3、Post请求
    • 3.2、接收响应:Response
      • 3.2.1、Response对象的属性
      • 3.2.2、响应中的中文乱码问题
    • 3.3、requests库的常用异常
    • 3.4、网络爬虫通用框架
    • 3.5、requests库的高级操作
      • 3.5.1、处理获取到的Cookie
      • 3.5.2、文件上传
      • 3.5.3、身份认证
      • 3.5.4、会话维持
      • 3.5.5、SSL证书验证
      • 3.5.6、代理设置
      • 3.5.7、Prepared Request
    • 3.6、使用案例
      • 3.6.1、爬取百度翻译
      • 3.6.2、爬取豆瓣电影排行榜
      • 3.6.3、爬取肯德基指定省市的餐厅数量
  • 4、BeautifulSoup库
    • 4.1、BeautifulSoup对象
    • 4.2、Tag对象(节点选择器)
    • 4.3、NavigableString对象
    • 4.4、Comment对象
    • 4.5、方法选择器:find()、find_all()
      • 4.5.1、find()
      • 4.5.2、find_all()
      • 4.5.3、其它方法
    • 4.6、CSS选择器
    • 4.7、使用案例:爬取B站弹幕
  • 5、lxml与XPath库
    • 5.1、lxml库
    • 5.2、XPath库
      • 5.2.1、基础节点选择语法
      • 5.2.2、节点修饰语法
      • 5.2.3、其他常用节点选择语法
    • 5.3、lxml与XPath结合使用
    • 5.4、使用案例:解析HTML

1、网络爬虫概述

1.1、什么是网络爬虫

  • 网络爬虫(Web Crawler)是一种自动化程序,用于从互联网上采集信息。它通过自动访问网页并提取所需的数据,实现对大量网页的快速检索和数据抓取
  • 网络爬虫通常使用HTTP协议来访问网页,并通过解析HTML、XML等网页内容来提取数据。爬虫可以从一个起始点(如某个特定网页)开始,然后根据链接关系自动地遍历和抓取其他相关网页

1.2、网络爬虫的工作原理

  1. 确定起始点:选择一个或多个起始网页作为爬虫的入口点
  2. 发送HTTP请求:通过HTTP协议向起始网页发送请求,并获取网页的内容
  3. 解析网页:解析网页的内容,通常使用HTML解析器或XML解析器来提取所需的数据
  4. 提取链接:从解析后的网页中提取其他相关网页的链接
  5. 存储数据:将爬取到的数据存储到数据库、文件或其他存储介质中
  6. 遍历网页:根据提取到的链接继续遍历和抓取其他相关网页,重复上述步骤

网络爬虫可以根据需要进行配置,例如设置爬取的深度、限制爬取的速度,以及处理反爬机制等

1.3、网络爬虫的分类与应用

  • 网络爬虫根据不同的目标和应用可以分为多种类型,如通用爬虫、聚焦爬虫、增量爬虫等

    • 通用爬虫是一种广泛应用的爬虫,可以遍历互联网上的大部分网页,并抓取数据进行索引和检索。搜索引擎的爬虫就是一种通用爬虫的例子
    • 聚焦爬虫是针对特定领域或特定网站进行抓取的爬虫。它只关注特定的内容,能够更精准地抓取所需的数据
    • 增量爬虫是在已有数据的基础上,只抓取新增或更新的数据。它可以根据时间戳或其他标识来判断数据的更新情况,减少重复抓取和处理的工作量
  • 网络爬虫在很多领域都有应用,如搜索引擎、数据挖掘、舆情分析、价格比较等

2、urllib库

urllib是Python的标准库之一,用于处理URL相关的操作

urllib库包含四个子模块:

"""
urllib.request:请求模块,用于打开和读取URL
urllib.error:异常处理模块,捕获urllib.error抛出异常
urllib.parse:URL解析,爬虫程序中用于处理URL地址
urllib.robotparser:解析robots.txt文件(一个遵循Robots Exclusion Protocol(机器人排除协议)的文本文件),判断目标站点哪些内容可爬,哪些不可以爬
"""

2.1、urllib.request模块

# 1)发送Get、Post请求
'''
urlopen(url,data,timeout) 
'''
import urllib.request

with urllib.request.urlopen('https://www.example.com') as resp:
    # getcode() 获取网页状态码
    print(resp.getcode())
    # read() 获取服务器响应的内容,读取整个网页数据
    content = resp.read().decode('utf-8')
    print(content)

HTTPResposne响应对象的其它成员:

'''
getheaders():获取请求头内容
getheader(name):获取指定请求头
readline():读取网页一行数据
readlines():读取网页多行数据
status:获取响应状态码
'''
# 2)Request()类 发送指定类型请求
'''
urllib.request.Request(url,data,headers,method)
'''
import urllib.parse

# 转换数据类型为bytes(data参数类型必须为bytes类型)
data = urllib.parse.urlencode({
   "key": "value"}).encode()
headers = {
   "User-Agent": "Mozilla/5.0"}
req = urllib.request.Request(url='https://www.example.com', data=data, method='POST', headers=headers)
with urllib.request.urlopen(req) as resp:
    # getcode() 获取网页状态码
    print(resp.status)
    # read() 获取服务器响应的内容,读取整个网页数据
    content = resp.read().decode('utf-8')
    print(content)

2.2、urllib.parse模块

# 解析URL: 
'''
urlparse(url,scheme协议类型,allow_fragments=True是否忽略URL中的fragment部分)
'''
# 标准的URL格式:
'''
scheme://netloc/path;params?query#fragment
'''
# 说明:
'''
scheme:URL协议
netloc:域名和端口
path:路径
params:最后一个路径元素参数
query:查询字符串
fragment:片段标志
'''
from urllib.parse import urlparse

url = 'https://www.example.com/path?query=hello#fragment'
parsed_url = urlparse(url)

print(parsed_url.scheme)       # https
print(parsed_url.netloc)       # www.example.com
print(parsed_url.path)         # /path
print(parsed_url.query)        # query=hello
print(parsed_url.fragment)     # fragment

# 其它方法:
'''
urlunparse():构建URL,与urlparse()方法逻辑相反
urljoin():方法用于拼接链接
urlencode():格式化URL请求参数
quote():编码URL特殊字符,尤其是转换中文字符
unquote():解码URL特殊字符
'''

2.3、urllib.error模块

urllib.error模块提供的异常类:

import urllib.error

'''
error.URLError:OSError的一个子类,用于处理URL相关的错误,如无法连接到服务器、网络问题等
error.HTTPError:URLError的一个子类,用于处理HTTP相关的错误,如页面不存在(404)、权限问题等
'''

异常类对象的属性:

'''
e.code:响应的状态码
e.reason:获取原因字符串
e.headers:获取响应的头部信息
'''

2.4、urllib.robotparser模块

3、requests库

requests是一个常用的第三方库,用于发送HTTP请求和处理响应。它提供了简洁而直观的API,使得发送请求和处理数据变得非常方便

3.1、发送请求:Request

3.1.1、发送请求的方法

'''
1)requests.request(method, url, params, data, headers, cookies)
  - method: 请求方式,对应以下各方法  
  - url: 页面链接  
  - params: url参数,字典或字节流类型 
  - data: 请求内容、请求体,字典、字节序列或文件对象类型
  - headers: HTTP自定义请求头,字典类型
  - cookies: 请求中的cookie,字典类型
  - json: 请求内容、请求体,JSON格式的数据
  - files: 请求内容、请求体,用于传输文件
  - timeout: 设置请求超时时间,单位秒
  - allow_redirects: 重定向开关,默认为True
  - proxies: 设置访问代理服务器,可以增加登录认证,字典类型
2)requests.get()         # 获取HTML网页的主要方法,对应HTTP的GET
3)requests.head()        # 获取网页头信息的方法,对应HTTP的HEAD(HTTP 头部本质上是一个传递额外重要信息的键值对)
4)requests.post()        # 向HTML网页提交POST请求,对应HTTP的POST
5)requests.put()         # 向HTML网页提交PUT请求,对应HTTP的PUT
6)requests.delete()      # 向HTML网页提交删除请求,对应HTTP的DELETE
7)requests.patch()       # 向HTML网页提交局部修改请求,对应HTTP的PATCH
'''

3.1.2、Get请求

# 1)基本用法
response = requests.get('https://httpbin.org/get')
print(response.text)

# 2&#

你可能感兴趣的:(#,Python,#,Python爬虫,python,爬虫,数据挖掘)