解析网页数据(在抓取网页全部数据后进行)

#爬取网页
def getData(baseurl):
    datalist=[]
    for i in range(0,10):
        url=baseurl+str(i*25) #调用10词循环 拿到250条信息
        html=askURL(url)  #保存获取到的网页源码 


def askURL(url):
    head={
        "User-Agent":"Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 105.0.0.0Safari / 537.36"
    }  #被理解为浏览器 用户代理表示告诉豆瓣 模拟浏览器头部信息发送消息
    req=urllib.request.Request(url=url,headers=head)
    html=""
    try:
        response=urllib.request.urlopen(req)
        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

        #2.解析数据 for之中 一个网页解析一下
        soup=BeautifulSoup(html,"html.parser")
        for item in soup.find_all('div',class_="item"): #查找符合要求的字符串 形成列表 class做属性加下划线
            #print(item)  测试用:查看所以item信息
            data=[]#保存一部电影的所有信息
            item=str(item)  #变成一个字符型 可以用正则表达式
            link=re.findall(findLink,item)[0]  #需要给他一个规则 也就是正则表达式  [0]就是筛选出第一个
            print(link)  #获取到影片详情的链接

(1)首先还是接着上次的说 得到全部的html源码

(2)用soup=BeautifulSoup(html,"html.parser") 对源码进行翻译,变成tag

(3)观察网页源码 发现我们要的信息在div这个字符串下的class_属性中的item里面,相当于这个是他的一级目录。

(4)item转换成str形式 即将进行finaall中findlink的操作,这里涉及源码的正则编译

def main():
    baseurl="https://
    #1.爬取网页
    datalist=getData(baseurl)
    savapath = ".\\.xls"
    #3.保存数据
    #savaData(savepath)   #quanj
#链接的规则
findLink=re.compile(r'<a href="(.*?)">')  #创建正则表达式对象,表示出目标规则    herf后面是网址的表示          ?0词或一次
#图片的规则
findImgSrc=re.compile(r'<img.*src="(.*?)"'.re.S)  #re.S 忽略中间的换行符
#片名
findt=re.compile(r'<span class="title">(.*)</span>')
#评分
findra=re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
#评价人数
findpeo=re.compile(r'<span>(\d*)人评价</span>')
#找概况
findinq=re.compile(r'<span class="inq">(.*)</span>')   #()
#相关内容
findbd=re.compile(r'<p class="">(.*))</p>',re.S)

一般把编译规则放到主程序下 而不用进单一的网页解析循环中

findLink=re.compile(r'<a href="(.*?)">')

以href为例,其实基本的操作都差不多,不同的是编译规则 这个从网页源代码中来的。

r'是破解转译符号 相同的地方复制粘贴 不同的地方进行编译

都有()这样的括号 对内容进行分组

.表示中间有任意字符

(.*) 表示中间的任意字符有任意多个
(\d*)  0-9内的数字可以无限多
(.*?) 可以有字符 也可以什么都没有 范围其实更大

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值