初学Python爬虫
初学Python爬虫
-
爬虫定义
模拟客户端发送网络请求,获取响应数据,自动的抓取万维网信息的程序或脚本
-
requests库
HTTP请求库,作用是发送请求获取响应数据
安装:
pip install requests#导入模块 import requests #发送请求,获取响应 response = requests.get('https://www.baidu.com/') #获取响应数据 response.encoding = 'utf-8' print(response.text) print(response.content.decode()) //二进制response.text,响应体str类型
response.ecoding,二进制转换字符使用的编码
response.content,响应体,byte类型 -
BeautifulSoup库
从HTML或XML文件中提取数据的Python库,有遍历文档树和搜索文档树中描述的大部分的方法
安装:
pip install bs4,pip install lxml#导入模块 from bs4 import BeautifulSoup #创建BeautifulSoup对象 soup = BeautifulSoup('<html>data</html>','lxml') print(soup)find方法
find(name=None, attrs={}, recursive=True, text=None, \**kwargs)name:标签名
attrs:属性
recursive:是否递归循环查找
text:根据文本内容查找
返回找到的第一个元素find_all返回找到的所有元素
#根据标签进行查找 soup.find('a') #根据属性进行查找 soup.find('id=link1') soup.find(attrs={id:'link1'}) #根据文本查找 soup.find(text='查找内容')tag对象(find方法返回的对象)
应用于原始文档中的XML或HTML标签,有很多方法和属性,可遍历文档树和搜索文档书以及获取标签内容
name,获取标签名
attrs,获取标签所有属性的键和值
text,获取标签的文本字符串 -
正则表达式
是一种字符串的匹配模式
检查一个字符串是否含有某种子串
替换匹配的子串
提取某个字符串中匹配的子串<center>字符</center>
一般字符 匹配自身 abc abc . 匹配任意除换行符"\n"外的字符,在DOTALL模式也能匹配换行符 a.c abc \ 转义字符 a\.c a.c […] 字符集(所有特殊字符在字符集中都失去意义,需要加\) a[bcd]e abe | ace |ade <center>预定义字符集</center>
\d 数字:[0—9] a\dc a1c \D 非数字:[^\d] a\Dc abc \s 空白字符:[<空格>\t\r\n\f\v] a\sc a c \S 非空白字符:[^\s] a\Sc abc \w 单词字符:[A-Z a-z 0-9 _ 中文] a\wc abc \W 非单词字符:[^\w] a\Wc a c <center>数量词</center>
* 匹配前一个字符0次以上(包含零次) abc* ab | abccc + 匹配前一个字符1次以上(包含一次) abc+ abc | abccc ? 匹配前一个字符0次或一次 abc? ab | abc 匹配前一个字符m次 ab{2}c abcc re.findall方法
re.findall(pattern,string,flags=0)扫描整个字符串,返回所有与pattern匹配的列表
参数:pattern:正则表达式, string:字符串, flags=0:匹配模式
#导入正则模块 import re rs = re.findall('a.c','abc') print(rs) #不加re.DOTALL(re.S),不能匹配换行符 rs = re.findall('a.bc','a\nbc',re.DOTALL) #结果['a\nbc'] rs = re.findall('a.+bc','a\nbc',re.DOTALL) # 结果['\n'],括号外的用来定位,只匹配小括号里的内容 rs = re.findall('a(.+)bc','a\nbc',re.DOTALL)r原串
消除转移符带来的影响,还可以解决PEP8不规范问题
-
JSON
JSON Python object dict array list string str number(int) int,long number(real) float true True false False null None import json #把json字符串转换成python类型数据 pythonDict = json.loads(json_str) #json格式文件转换成python类型数据 #打开文件对象 with open('path',encoding=utf-8) as f: #把文件json格式内容转换成python类型数据 pythonList = json.load(f) ############################################### #python转换成JSON字符串 json_str = json.dumps(pythonDict) #以写的方式打开 with open('path','w') as f: #把python数据以json格式存储到文件中 json.dump(pythonDict,f,ensure_ascii=False)

浙公网安备 33010602011771号