Python爬虫入门笔记
一、requests请求库
-
requests安装:pip install requests
-
request使用3步骤
①导入模块
②发送get请求,获取响应:response = requests.get(url)
③从响应中获取数据
#1.导入模块 import requests #2.发送请求,获取响应 response = request.get('http://www.baidu.com') #3.从响应中获取数据 print(response.text)
-
response常见属性
-
response.text:响应体str类型
-
response.encoding:二进制转换字符使用的编码
-
response.content:响应体bytes类型
-
# 3.从响应中获取数据
# 打印所使用的编码:ISO-8859-1
print(response.encoding)
# 设置编码为:UTF-8
response.encoding = 'utf-8'
print(response.text)
# 打印响应的二进制数据
print(response.content)
# 把二进制数据转换字符串
print(response.content.decode())
二、Beautiful Soup解析库
-
Beautiful Soup 4安装:pip install bs4
-
lxml安装:pip install lxml
-
创建BeautifulSoup对象:soup = BeautifulSoup(html,'lxml')
# 1.导入模块 from bs4 import BeautifulSoup # 2.创建BeautifulSoup对象 soup = BeautifulSoup('<html>data</html>','lxml') print(soup)
-
BeautifulSoup对象的find方法
1、根据标签名:soup.find('a')
2、根据属性查找:soup.find(id='link1')或soup.find(attrs={'id':'link1'})
3、根据文本内容查找:soup.find(text='Elsie')
-
find方法的作用:搜索文档树
-
find(self,name=None,attrs={},recursive=True,text=None,**kwargs)
- 参数
- name:标签名
- attrs:属性字典
- recursive:是否递归循环查找
- text:根据文本内容查找
- 返回
- 查找到的第一个元素对象
- 参数
-
tag对象
tag对象对应于原始文档中的XML或HTML标签
Tag有很多方法和属性,可用于遍历文档树和搜索文档树以及获取标签内容
-
tag对象常见属性
- name:获取标签名称
- attrs:获取标签所有属性的键和值
- text:获取标签的文本字符串
#根据标签名查找 #1.导入模块 from bs4 import BeautifulSoup #2.文档内容 html = """ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>xxxxx</title> </head> <body> <h1>我的第一个标题</h1> <p>我的第一个段落。</p> </body> </html> """ #3.创建BeautifulSoup对象 soup = BeautifulSoup(html, 'lxml') #4.查找title标签 title = soup.find('title') print(title) #5. 查找a标签 a = soup.find('a') print(a) #6. 查找所有的a标签 a_s = soup.find_all('a') print(a_s) #二、根据属性进行查找 #查找id为link1的标签 #方式1: 通过命名参数进行制定的 a = soup.find(id="link1") print(a) #方式2: 通过attrs来指定属性字典,进行查找 a = soup.find(attrs={'id': 'link1'}) print(a) #三、根据文本内容进行查找 text = soup.find(text="菜鸟教程") print(text) #Tag对象 #对应原始文档的XML和HTML标签 #属性有 # name 姓名 # attrs 属性 # text 文档内容 print(type(a)) print(a.name) print(a.attrs) print(a.text)
-
三、正则表达式
-
概念
正则表达式是一种字符串匹配的模式(pattern)。
-
作用
从某个字符串中提取符合某种条件的子串
-
语法
1、. 匹配除换行符(\n)以外所有字符
2、\d 匹配[0-9]的数字
3、\w 匹配字母数字_和中文
4、* 前面的一个匹配模式出现0次或多次
5、+ 前面的一个匹配模式出现1次或多次
6、? 前面的一个匹配模式出现0次或1次
-
re.findall()方法
-
如果正则表达式中没有()则返回与整个正则匹配的列表
-
如果正则表达式中有(),则返回()中匹配的内容列表,小括号两边东西都是负责确定提取数据所在位置。
re = re.findall("a.+bc","a\nbc",re.DOTALL) print(rs) //结果:['a\nbc'] re = re.findall("a(.+)bc","a\nbc",re.DOTALL) print(rs) //结果:['\n']
-
-
正则表达式中的r原串的使用
- 正则中使用r原始字符串,能够忽略转义符号带来的影响
- 待匹配的字符串中有多少个\,r原串正则中就添加多少个\即可
四、json模块
-
json模块
json模块是Python自带的模块,用于json与python数据之间的相互转换。
-
json转换成python
- json字符串 —>python数据类型:json.loads(s)
- json格式的文件对象 —>python数据类型:json.load(fp)
-
python转换为json
- python类型数据 —>json字符串:json.dumps(obj)
- python类型数据 —>json格式文件:json.dump(obj,fp)