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

    作业一

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

    import requests
    import bs4
    from bs4 import BeautifulSoup
    def getHTMLText(url):
        try:
            r = requests.get(url, timeout=30)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return ""
    def fillUnivList(ulist, html):
        soup = BeautifulSoup(html, "lxml")
        for tr in soup.find('tbody').children:#子节点
            if isinstance(tr, bs4.element.Tag):
                tds = tr('td')
                ulist.append([tds[0].text.strip(), tds[1].text.strip(), tds[2].text.strip(), tds[3].text.strip(),
                               tds[4].text.strip()])
    def printUnivList(ulist, num):
        tplt='{0:^5}	{1:{5}^15}	{2:^5}	{3:^10}	{4:^5}'
        print(tplt.format('综合排名','学校','位置','类型','总分',chr(12288)))#chr(12288)是中文空格填充字符
        for i in range(num):
            u=ulist[i]
            print(tplt.format(u[0],u[1],u[2],u[3],u[4],chr(12288)))
    def main():
        unifo=[]
        url='http://www.shanghairanking.cn/rankings/bcur/2020'
        html=getHTMLText(url)
        fillUnivList(unifo, html)
        printUnivList(unifo, 40)
        #爬40所学校
    main()
    

    (2)心得体会

    网址的变动带来一些小麻烦,又去百度了一些新知识点,都是知识点

    作业二

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

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    # author: xm031804114 time:2020/9/22
    import requests
    from bs4 import BeautifulSoup
    
    def get_html(url):
        # 模拟浏览器访问
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                          'AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/81.0.4044.138 Safari/537.36',
            'accept-language': 'zh-CN,zh;q=0.9'
        }
        print("来了来了")
        response = requests.get(url, headers=headers)  # 请求访问网站
        if response.status_code == 200:
            html = response.text  # 获取网页滴源码
            return html  #获取成功后返回
        else:
            print("获取网站信息失败!")
    
    if __name__ == '__main__':
        #关键字,可以直接更改,不用再去重新复制新的网址
        keyword = '书包'
        # 搜索地址,官网地址加keyword
        search_url = 'https://search.jd.com/Search?keyword=' + keyword + '&enc=utf-8'
        html = get_html(search_url)
        # 初始化BeautifulSoup库,并设置lxml解析器
        soup = BeautifulSoup(html, 'lxml')
        # 找到所有的商品所在的li
        goods_list = soup.find_all('li', class_='gl-item')
        number=0
        for li in goods_list:  # 遍历父节点
            # 商品名称
            name = li.find(class_='p-name p-name-type-2').find('em').get_text()
            # 价格
            price = li.find(class_='p-price').find('i').get_text()
            # 将商品信息放入数组中
            number+=1
            goods = [number,price,name]
            print(goods)
    

    (2)心得体会

    淘宝属实比京东难爬,真的要加headers!,还有正则确实要学很多知识点,下面的就很明显

    作业三

    爬取一个给定网页(http://xcb.fzu.edu.cn/html/2019ztjy)或者自选网页的所有JPG格式文件

    输出信息:将自选网页内的所有jpg文件保存在一个文件夹中

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    # author: xm031804114 time:2020/9/23
    
    import urllib.request
    import os
    import re
    
    targetPath  = "D:machinelearn数据采集技术photo"
    def saveFile(path):
        # 设置每个图片的路径
        pos = path.rindex('/') #rindex()  返回子字符串 str 在字符串中最后出现的位置
        ans = os.path.join(targetPath,path[pos+1:])
        return ans
    url = "http://xcb.fzu.edu.cn/"
    #请求
    req = urllib.request.Request(url)
    #爬取的结果
    res = urllib.request.urlopen(req)
    #显示结果
    data = str(res.read())
    urla = "http://xcb.fzu.edu.cn/"
    pattern = r'([w./]+.(jpg|JPG))'#只取JPG格式的照片
    imgurl = re.findall(pattern, data)
    for link,value in imgurl:
        url = urla+str(link)
        print(url) #打印图片链接
        try:
            urllib.request.urlretrieve(url,saveFile(url))#urlretrieve() 方法直接将远程数据下载到本地
        except:
            print("爬取失败")
    

    (2)心得体会

    此处接上面就是正则进行筛选就很优秀,需要多百度正则使用方法,os的用法也有点多,又收藏夹里堆着了

  • 相关阅读:
    深入理解Java:注解(Annotation)--注解处理器
    Java进阶之reflection(反射机制)——反射概念与基础
    JAVA 动态代理
    注解是建立在class文件基础上的东西,同C语言的宏有异曲同工的效果
    Android 进阶8:进程通信之 Binder 机制浅析
    Android Binder机制(一) Binder的设计和框架
    Android Service初解
    原生sql和 TP sql怎么关联?
    Laravel 修改默认日志文件名称和位置
    laravel asset()函数
  • 原文地址:https://www.cnblogs.com/lmmlm/p/13741665.html
Copyright © 2011-2022 走看看