• 前期的数据爬取及分类整理


    前期的数据爬取及分类整理

    from bs4 import BeautifulSoup
    import re
    import urllib.request
    
    def main():
        baseurl = "https://movie.douban.com/top250?start=0&filter="
        #1.爬取网页
        datalist = getData(baseurl)
        savepath =r".豆瓣电影top250.xls"#./:保存至当前位置。.:保存至文件路径
        #3.保存数据
        saveData(savepath)
    
    #创建正则表达式的规则:匹配掉什么?留下的是什么??
    #影片详情连接的规则
    findlink = re.compile(r'<a href="(.*)">') #创建正则表达式,表示规则 (.*?):网站都是字符串表示的,来表示任意的字符串
    #所设立的规则中利用正则表达式的是即为所要提取的内容
    #影片图片的提取
    findimage = re.compile(r'<img .* src="(.*?)"/>',re.S) #re.S让换行符包含在字符中,进行无差别的匹配
    #影片的片名
    findname = re.compile(r'<span .*>(.*?)</span>')
    #影片的评分
    findscore = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
    #影片的简介
    summary = re.compile(r'<p class="">(.*?)</p>',re.S) #换行符很重要!!!!
    
    #爬取网页
    def getData(baseurl):
        datalist = []
    
        #对网址进行加工
        for i in range(0,1): #调用获取页面信息10次
            url = baseurl + str(i*25)#需要对url的样式进行观察并总结其中的规律
            html = askURL(url)#保存获取到的额网页源码
    
    
        #2.逐一解析数据
        data = []
        soup = BeautifulSoup(html,"html.parser")#解析器
        for item in soup.find_all("div",class_="item"): #查找符合要求的字符串,形成列表??
    
            item = str(item)#是有对数据的类型进行字符串装换的啊!!!
    
    
            link = re.findall(findlink,item)[0] #re库用来通过正则表达式查找指定的字符串,利用规则进行匹配
            data.append(link)
            image = re.findall(findimage, item)
            data.append(image)
            #对标题进行加工
            titles = re.findall(findname, item)
            if (len(titles)==2):
                ctitles = titles[0]
                data.append(ctitles)
                otitles = titles[1].replace("/",'')
                data.append(otitles)
            else:
                data.append(titles[0])
                data.append(" ")#外文名留空
    
    
            vieos_summary = re.findall(summary,item)[0] #这里肯定还是字符串类型!!
            vieos_summary = re.sub(r'<br/>(s+)?'," ",vieos_summary)  # 匹配空格 ,此处设立的规则是你所要调换的对象,
            # 问题如果前后没有标识物,是否还可以(可以的)
            vieos_summary = re.sub("/"," ",vieos_summary)
            vieos_summary = re.sub(" ",'',vieos_summary)
            data.append(vieos_summary)
            print(data)
            break
    
        return datalist
    
    
    #爬取网页内容
    def askURL(url):#传一个参数
    
        head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"}
        #头部信息,伪装部分成浏览器需要的必要信息
        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):
        pass
    
    
    if __name__ == "__main__":#主函数
       main()
    

    思考及整理( 残!!!待补充!!)

    # 第一步简单的网页爬取
    html = "https://movie.douban.com/top250?start=0&filter="
    import urllib.request
    import re
    
    head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
            }
    request = urllib.request.Request(html,headers = head)
    respond = urllib.request.urlopen(request)#发出请求并返回一个对象
    result = respond.read().decode("utf-8")
    print(result)
    
    '''
    对于urllib,request爬取网页的步骤
    1.研究url的规律,是单独的网页信息还是有各种连接的
    2.伪装成浏览器
    3.利用Request函数进行信息的爬取此时应传入所伪装的头部信息
    4.利用urlopen打开
    5.读取所返回的对象(注意是否含有汉语,视情况是否加utf-8)
    6.最后得出的结果应该是html类型???
    '''
    
    #第二步:对信息进行加工处理
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(result,"result.parser") #对html进行解析
    soup = soup.findall("div",class_="item") #找到完整的信息块
    print(str(soup))
    #利用正则表达式,对信息进行分类整理
    findlink = re.compile(r'')
    
    
    print(soup,type(soup))
    

    小知识点

    Beautiful Soup将复杂的HTML文档转换成一个复杂的树形结构,每个节点都是python对象,所有对象可以归纳为4种

    • Tag
    • NavigableString
    • BeautifulSoup
    • Comment
  • 相关阅读:
    reids(缓存,reids下载,安装 测试)
    springboot(运行原理参考借鉴)
    springboot(整合事务和分布式事务)
    springboot(整合多数据源demo,aop,定时任务,异步方法调用,以及获取properties中自定义的变量值)
    Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
    springboot整合netty,多种启动netty的方式,展现bean得多种启动方法
    im开发总结:netty的使用
    学习中常见错误码得解决方案
    内部类的使用
    Variable used in lambda expression should be final or effectively final
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/13792936.html
Copyright © 2020-2023  润新知