zoukankan      html  css  js  c++  java
  • 第一次作业——结合三次小作业

    作业①:
    要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,屏幕打印爬取的大学排名信息。
    输出信息:

    排名 学校名称 省市 学校类型 总分
    1 清华大学 北京 综合 852.5
    2 ... ... ... ...
    1)代码:
    import requests,re
    from bs4 import BeautifulSoup
    
    url = "http://www.shanghairanking.cn/rankings/bcur/2020"
        
    r = requests.get(url)
    r.encoding="UTF-8"
    soup = BeautifulSoup(r.text, "html.parser")
    trList = soup.select("tr")
    
    for tr in trList[1:]:
        # 清除tr.text里的
    和*(因为学校名称带个*),替换成空格,然后以空格为分隔得到数组,数组里有很多空字符串"",取数组里的非空字符串,格式化输出
        data = [x for x in re.sub("[%s]+" % "
    *"," ",tr.text).split(" ") if x!=""]
        p = lambda x:format(x,"<"+str(30)) if x.isdigit() else format(x,"<"+str(30-len(x)))
        print(p(data[0]),p(data[1]),p(data[2]),p(data[3]),p(data[4]))
    

    图片:

    ...

    2)心得体会:作业1一看觉得挺难的,后面大佬牛哥讲解了一下,一语中的,让我大致熟悉了爬虫的流程,就是输出格式要思考一番.

    作业②:

    要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。
    输出信息:

    序号 价格 商品名
    1 65.00 xxx
    2 ... ...
    1)代码
    import requests
    import re
    
    def gethtml(url):
        headers = {
            "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"
        }
        r = requests.get(url,headers=headers)
        r.encoding = "UTF-8"
        return r.text
    
    def getGoodsMsg(msg):
        # 每件商品的信息都包含在<li data-sku=...></li>标签中
        m = re.findall("<li data-sku.*>", msg)
        # 一开始用其它的爬60项,会有重复的,而且顺序不是从小到大,需要排序一下(由于要求使用requests,实力限制仅有30项)
        pos = sorted(list(set([msg.index(i) for i in m])))
        print("序号	价格"+"	"*5+"商品名")
        for i in range(len(pos)):
            # 在每个<li>标签中匹配数据
            start = pos[i]
            end = msg.rindex("</ul>") if i==len(pos)-1 else pos[i+1]
            item = msg[start:end]
            try:
                price = re.search("<i>(d|.)+</i>",item).group(0)
                name = re.search("<em>[^¥]*?</em>",item).group(0)
                # 有的商品名带有 京东超市 ,会带有
    	,用replace方法去除
                print(str(i+1)+"	"+re.sub("<[^>]*>","",price)+"	"+re.sub("<[^>]*>","",name).replace("
    ","").replace("	"," "))
            except AttributeError as e:
                print(e)
                continue
    
    if __name__=="__main__":
        url = "https://search.jd.com/search?keyword="
        goods = "口红"    
        pageurl = url+goods
        msg = gethtml(pageurl)
        getGoodsMsg(msg)
    

    图片:

    2)心得体会:作业2一看觉得挺难的,后面大佬晟新讲解了一下,茅塞顿开,只用正则还是花了挺长时间,代码原来是处理60项的,爬30项好像没那么多问题,直接两个findAll就行.

    作业③:
    要求:爬取一个给定网页(http://xcb.fzu.edu.cn/html/2019ztjy )或者自选网页的所有JPG格式文件
    输出信息:将自选网页内的所有jpg文件保存在一个文件夹中

    1)代码:

    import requests
    import re
    import os
    
    # 存储图片
    def saveImg(url, path):
        r = requests.get(url)
        with open(path, 'wb') as f:
            f.write(r.content)
            f.close()
            print(name+"保存成功")
    
    url = "http://xcb.fzu.edu.cn/"
    # 文件夹结尾有\,便于后续字符串拼接
    savepath = "C:\image\fzu\"
    # 有jpg和JPG
    r = requests.get(url).text.lower()
    
    # 清理注释 注释里的cast1234.jpg 会重复
    r = re.sub("<!--(.|
    )*?-->", "", r)  
    # 从第6位开始取 前5位是src=" | 后面不在<img>标签里
    imglist = [imgurl[5:] for imgurl in re.findall("src=".*?jpg", r)] + re.findall("/attach.*?jpg", r)
    # 不存在存储文件夹则创建
    if not os.path.exists(savepath):
        os.mkdir(savepath)
    for imgurl in imglist:
        # 相对路径=>绝对路径
        if imgurl[0] == "/":
            imgurl = url+imgurl
        # 找最后一个/出现的位置 取后面的字串作为名字 因为路径都是http://xcb.fzu.edu.cn/cxcgg/fuji.jpg这样的
        name = imgurl[imgurl.rindex("/")+1:]
        if os.path.exists(savepath+name):
            print(name+"已存在")
        else:
            saveImg(imgurl, savepath+name) 
    

    图片:

    2)心得体会:作业3一看觉得挺难的,后面大佬11zhi讲解了一下,为有源头活水来!此次作业我对正则的理解更加深入,有催人跑的意思。

  • 相关阅读:
    智力题:砝码称重问题
    Java:Comparator接口
    机器学习中比较重要的几个概念
    NLP:Gensim库之word2vec
    Java遍历Map对象的四种方式
    给数据库减负刻不容缓:多级缓存设计
    CentOS6.10安装redis5.0
    Linux下安装whl文件
    Linux下安装Gensim
    Linux下安装jieba
  • 原文地址:https://www.cnblogs.com/baiii/p/13745606.html
Copyright © 2011-2022 走看看