xiaohuhu

一、字符串处理

二、正则表达式

 \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)

分类:

技术点:

相关文章: