zoukankan      html  css  js  c++  java
  • Python大数据分析之网络爬虫

    一、字符串处理

    二、正则表达式

     d匹配一个数字,D匹配一个非数字,w匹配一个字母或数字,.可以匹配任意一个字符,*表示任意字符,+表示至少一个字符

    ?表示0个或1个字符,{n}表示n个字符,用{n,m}表示n~m个字符。

    (1)d{3} 表示匹配3个数字

    (2)s+  表示至少匹配一个空格 ,S 表示匹配任何非空白字符

       [sS]* 可以包括换行符在内的任意字符

    (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)
  • 相关阅读:
    Qt实现模糊搜索
    Qt解析多级xml文件
    insert into
    Git忽略规则(.gitignore配置)不生效原因和解决
    搭建vue开发环境
    表单
    事件处理
    列表渲染
    条件渲染
    class与style绑定
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/12015551.html
Copyright © 2011-2022 走看看