Python学习笔记

"本文介绍了Python的BeautifulSoup库用于网页解析,包括find_all、text、limit参数的使用,以及CSS选择器的应用。同时,详细讲解了正则表达式的基本操作符,如.*、[ ]、*、+、?、!、{m}
摘要由CSDN通过智能技术生成

1.BeautfulSoup的补充

#2.kwargs    参数
t_list=bs.find_all(id='head')
t_list=bs.find_all(class_True)
for item in t_list:
    print(item)


#3.text参数
t_list=bs.find_all(text='hao123')
t_list=bs.find_all('hao123','地图')
for item in t_list:
    print(item)   #输出 hao123 地图


#4.limit参数
t_list=bs.find_all('a',limit=3)
for item in t_list:
    print(item)#输出又3个与字符串相关内容



#Css选择器
t_list=bs.select('title')  #通过标签的查找
t_list=bs.select('.mnav')   #通过类名查找
t_list=bs.select('#u1')   #通过id来查找
for item in t_list:
    print(item)

2.正则表达式的补充

操作符                                 说明                                             实例

.                                    表示任何单个字符 

[   ]                               字符集,对单个字符给出范围             [abc]表示a,b,c [A-Z]A-Z的单字符

*                            前一个字符0或无限次扩展                         abc*  表示ab   abc  abcc  abcccc等

+                           前一个字符1或无限次扩展                         abc+  表示abc   abc c  abcccc等

?                          前一个字符0或1次扩展                              abc?表示ab  abc

!                           左右表达式任意一个                                   abc|def   表示abc   def

{m}                      扩展一个字符m次                                     ab{2}c   表示abcc

{m,n}                扩展一个字符m~n次                                   ab{1,2}表示  abc  abcc

^                          匹配字符串开头                                         ^abc 表示abc在字符串的开头

$                         匹配字符串结尾                                           ^abc 表示abc在字符串的结尾

应用例子

import re
#创建模式对象
pat=re.compile('AA')   #此处的AA是正则表达式用来验证的对象
m=pat.search('CBA')   #被用来检验的对象
print(m)   #输出为None

m=pat.search('AABBCCDD')
print(m)      #输出span=(0,2)

m=pat.search('AABBCCAA')
print(m)


#最简单的方法
#没有模式的对象
m=re.search('mm','mmaacc')#前面的字符串是校验的规则 后面的字符串是校验对象
print(m)


print(re.findall('a','aSdacda'))  #前面的字符串是校验的规则 后面的字符串是校验对象
#输出['a','a','a']

print(re.findall('[A-Z]+','ABCabcEFG'))
#输出 ['ABC','EFG']

#sub
print(re.sub('a','A','AAaaBBcc'))  #在第三个字符串中的a用A来代替
#输出 AAAABBcc

3.正则提取以及标签解析

以豆瓣为例

from bs4 import BeautifulSoup   #网页分析
import xlwt   # 进行excel操作
import re    # 正则表达式,进行文字匹配
import urllib.request,urllib.error  # 进行数据获取
import sqlite3 #进行数字库操作
def main():
   baseurl='https://movie.douban.com/top250?start='
   #爬取网页
   datalist=getData(baseurl)
   savepath=r'.\\豆瓣电影Top250.xls'
   #保存数据
   # saveData(savepath)
   askURL('https://movie.douban.com/top250?start=0')

#影片详情的规则
findLink=re.compile(r'<a href="(.*?)">')   #创建正则表达式对象,确定规则
#影片图片
findImgSrc=re.compile(r'<img.*src="(.*?)"',re.S)    #re.S 让换行符包含在字符中
#影片评分
findRating=re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
#影片片名
findTitle=re.compile(r'<span class="title">(.*)</span>')
#影片评价人数
findJudge=re.compile(r'<span>(\d*)人评价</span>')
#找到概况
findInq=re.compile(r'<span class="inq">(.*)</span>')
#找到影片相关内容
findBd=re.compile(r'<p class="">(.*?)</p>',re.S)


#爬取网页
def getData(baseurl):
    datalist=[]
    for i in range(0,10):    #调用页面信息的函数:10次
        url=baseurl+str(i*25)
        html=askURL(url)      #保存获取的源码
    #逐一解析
        soup=BeautifulSoup(html,"html.parser")
        for item in soup.find_all('div',class_="item"):
           #print(item) 测试查看item的全部信息
           data=[]  #保存一部电影的所有信息
           item=str(item)
           #影片详情
           link=re.findall(findLink,item)[0] #re库用来通过正则表达式查找指定的字符串
           data.append(link) #添加链接
           imgsrc=re.findall(findImgSrc,item)[0]
           data.append(imgsrc)    #添加图片
           titles=re.findall(findTitle,item)[0]
           if (len(titles)==2):
               ctitle=titles[0]
               data.append(ctitle)    #添加中文名
               otitle=titles[1].replace('\n','')   #去掉无关符号
               data.append(otitle)      #添加英文名
           else:
               data.append(titles[0])
               data.append('')  #外国名留空
           judgeNum=re.findall(findJudge,item)[0]
           data.append(judgeNum)   #添加评价人数
           inq=re.findall(findInq,item)[0]
           if(len(inq)!=0):
               inq=inq[0].replace('。','')  #去掉句号
               data.append(inq)             #添加概述
           else:
               data.append('')   #留空
           bd=re.findall(findBd,item)[0]
           bd=re.sub('<br(\s+)?>/(\s+)?','',bd)  #去掉br
           bd=re.sub('/','',bd)    #替换斜杠为''
           data.append(bd.strip())   #去掉前后的空格
           datalist.append(data)
        print(datalist)
        return datalist



#得到指定的网页内容
def askURL(url):
    head={    #模拟浏览器头部信息,
        'User-Agent': 'Mozilla / 5.0(Windows NT 10.0; Win64;x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 98.0 .4758.102 Safari / 537.36 Edg / 98.0 .1108.62'
    }
        #用户代理,告诉豆瓣我们是什么类型的浏览器,
    request=urllib.request.Request(url,headers=head)
    html=""
    try:
       response=urllib.request.urlopen(request)
       html=response.read().decode('utf-8')
       # print(html)
    except urllib.error.URLError as e:
       if hasattr(e,'code'):
        print(e.code)
       if hasattr(e,'reason'):
            print(e.reason)

    return html





def saveData(savepath):
    print('save......')


main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值