一、字符串处理
二、正则表达式
\d匹配一个数字,\D匹配一个非数字,\w匹配一个字母或数字,.可以匹配任意一个字符,*表示任意字符,+表示至少一个字符
?表示0个或1个字符,{n}表示n个字符,用{n,m}表示n~m个字符。
(1)\d{3} 表示匹配3个数字
(2)\s+ 表示至少匹配一个空格 ,\S 表示匹配任何非空白字符
[\s\S]* 可以包括换行符在内的任意字符
(3)\d{3,8}表示匹配3~8个数字
(4)[0-9a-zA-Z\_] 匹配一个数字、字母或者下划线
(5)A|B 匹配A或B
(6)^\d 表示匹配以数字开头
(7)\d$表示匹配以数字结尾
(8)match对象上用group()提取子串,group(0)是原始字符串,group(1)表示第一个子串……
>>> m.groups()
(\'010\', \'12345\')
(9)正则匹配默认是贪婪匹配,加1个?表示采用非贪婪匹配
(10)如果一个正则表达式要重复使用,出于效率的考虑,可以预编译该正则表达式,接下来重复使用时
就不需要编译了,直接匹配即可。
三、编码处理
a="我叫胡胡"
str_gb2312=a.encode(\'gb2312\') #将str转换为gb2312编码
str_utf8=str_gb2312.decode(\'gb2312\').encode(\'utf-8\') #先解码在编码成utf-8
利用第三方库chardet判断编码格式
import chardet
det=chardet.detect(a)
四、获取网页源码
import requests res=requests.get(\'http://www.nuc.edu.cn\') content=res.text print(type(content))
五、从源码中提取信息
beautifulsoup可以从HTML或XML文件中提取数据,主要功能就是从网页抓取数据。
首先安装该库:pip install beautifulsoup4,还要安装html解释器:pip install lxml,接上面的代码。
from bs4 import BeautifulSoup soup=BeautifulSoup(content,\'lxml\') print(soup.prettify()) #按html格式打印内容 #从文档中找到所有<a>标签的链接 for a in soup.find_all(\'a\'): print(\'attrs: \',a.attrs) #取a标签的属性 print(\'string: \',a.string) #取a标签的字符串 print(\'---------------\') # attrs参数定义一个字典参数来搜索包含特殊属性的tag for tag in soup.find_all(attrs={\'class\':\'menu-link\',\'href\':\'#\'}): print(\'tag: \',tag.name) print(\'attrs: \',tag.attrs) print(\'string: \',tag.string) print(\'---------------\') #找出包含内容为教育部的标签 for tag in soup.find_all(name=\'a\',text=\'教育部\'): print(\'tag: \',tag.name) print(\'attrs: \',tag.attrs) print(\'string: \',tag.string) print(\'---------------\') import re for tag in soup.find_all(attrs={\'class\':re.compile(r\'\w{1,5}-\w{1,5}\')}): print(tag) print(\'---------------\')
六、数据存储
(1)保存到csv文件
csv="""id,name,score l,xiaohua,23 2,xiaoming,67 3,xiaogang,89""" with open(r"d:/1.csv",\'w\') as f: f.write(csv)
(2)保存到数据库
https://www.cnblogs.com/xiaohuhu/p/9387627.html
七、数据挖掘
爬取豆瓣电影top250数据。
import requests from bs4 import BeautifulSoup import re #获取网页源码,生成soup对象 def getSoup(url,headers): res = requests.get(url,headers=headers) return BeautifulSoup(res.text,\'lxml\') #解析数据 def getData(soup): data=[] ol=soup.find(\'ol\',attrs={\'class\':\'grid_view\'}) for li in ol.find_all(\'li\'): tep=[] titles=[] for span in li.find_all(\'span\'): if span.has_attr(\'class\'): if span.attrs[\'class\'][0]==\'title\': titles.append(span.string.strip()) #获取电影名 elif span.attrs[\'class\'][0]==\'rating_num\': tep.append(span.string.strip()) #获取评分 elif span.attrs[\'class\'][0]==\'inq\': tep.append(span.string.strip()) #获取评论 tep.insert(0,titles) data.append(tep) print(tep) print("-------------") print(data) print("=============") return data #获取下一页链接 def nextUrl(soup): a=soup.find(\'a\',text=re.compile(\'^后页\')) if a: return a.attrs[\'href\'] else: return None if __name__ == \'__main__\': headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"} url="https://movie.douban.com/top250" soup=getSoup(url,headers) data=getData(soup) print(data) nt=nextUrl(soup) while nt: soup=getSoup(url+nt,headers) print(getData(soup)) nt=nextUrl(soup)