文章目录
前言
本文记录下关于python爬虫的学习过程和个人见解。
一、爬虫
爬虫程序不一定非要python写,但是用python写肯定会更容易,python对于爬虫有很多比较友好的框架,框架一般适用于大型网站的爬虫需求,普通的网站随便请求下就行了。
爬虫的目标
将我们需要的数据从网络上爬取下来以供我们使用。
爬虫步骤
网络爬虫应用一般分为两个步骤:
- 通过网络连接获取网络内容。可以使用函数库requests
- 对获取的网络内容进行处理。可以使用函数库BeautifulSoup4
Robots排除协议
Robots Exclusion Standard,网络爬虫排除标准
- 作用:
网站告知网络爬虫哪些页面可以抓取,哪些不行 - 形式:
在网站根目录下的robots.txt文件
二、函数库介绍
Python语言提供了很多便于爬虫的函数库,包括urllib、urllib2、urllib3、wget、scrapy、requests、beautifulsoup4等。这些库作用不同、使用方式不同、用户体验不同。下面将详细介绍其中最重要且最主流的两个函数库:requests和beautifulsoup4,它们都是第三方库。
1.requests函数库
requests库是一个简洁且简单的处理HTTP请求的第三方库。它的最大优点是程序编写过程更接近正常URL访问过程
主要用于通过网络连接获取网络内容。
- 安装:
pip3 install requests
- 导入:
import requests
网页请求函数
方法 | 说明 |
---|---|
requests.request() | 构造一个请求,支撑以下各个方法的基础方法 |
requests.get() | 获取网页的主要方法,对应HTTP的GET |
requests.head() | 获取网页头信息的方法,对应HTTP的HEAD |
requests.post() | 向网页提交POST请求的方法,对应HTTP的POST |
requests.put() | 向网页提交PUT请求的方法,对应HTTP的PUT |
requests.patch() | 向网页提交局部修改请求,对应HTTP的PATCH |
requests.delete() | 向网页提交删除请求,对应HTTP的DELETE |
Response对象的属性
属性 | 说明 |
---|---|
r.status_code | 请求的返回状态,200表示访问成功,其余表示失败 |
r.text | 响应内容的字符串形式,即url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | 响应内容的二进制形式 |
通用代码框架
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 "产生异常"
if __name__ == '__main__':
url = "http://www.baidu.com"
print(getHTMLText(url))
2. beautifulsoup4函数库
beautifulsoup4库,也称为Beautiful Soup库或bs4 库。是一个解析和处理HTML和XML 的第三方库,用于解析和处理HTML和XML。
使用requests库获取HTML页面并将其转换成字符串后,需要进一步解析HTML页面格式,提取有用信息,这需要处理HTML和XML的函数库
- 安装:
pip3 install beautifulsoup4
- 导入:
from bs4 import BeautifulSoup
BeautifulSoup类
BeautifulSoup对应一个HTML/XML文档的全部内容。
解析内容
bs4库将任何HTML输入都变成utf‐8编码,解析方法如下:
eg: soup = BeautifulSoup('<html>data</html>', 'html.parser')
解析器 | 使用方法 | 条件 |
---|---|---|
bs4的HTML解析器 | BeautifulSoup(mk, ‘html.parser’) | 安装bs4库 |
lxml的HTML解析器 | BeautifulSoup(mk,’lxml’) | pip install lxml |
lxml的XML解析器 | BeautifulSoup(mk,’xml’) | pip install lxml |
html5lib的解析器 | BeautifulSoup(mk,’html5lib’) | pip install html5lib |
BeautifulSoup类的基本元素
基本元素 | 说明 |
---|---|
Tag | 标签,最基本的信息组织单元,分别用<>和</> 表明开头和结尾 |
Name | 标签的名字,<p>…</p>的名字是‘p’,格式:<tag>.name |
Attributes | 标签的属性,字典形式组织,格式:<tag>.attr |
NavigableString | 标签内非属性字符串,<>…</>中字符串,格式:<tag>.string |
Comment | 标签内字符串的注释部分,一种特殊的Comment类型 |