zoukankan      html  css  js  c++  java
  • 第一次作业

    作业①

    1)、UniversitiesRanking实验

    import urllib
    import requests
    from bs4 import BeautifulSoup
    url="http://www.shanghairanking.cn/rankings/bcur/2020"
    req=urllib.request.Request(url)
    data=urllib.request.urlopen(req)
    soup=BeautifulSoup(data, "lxml")
    tags=soup.find_all("tr")   # 爬取"tr"标签内的所有数据
    str=[]
    for tag in tags:
        str.append(tag.text)
    s=str[1:]   # 去掉无用的str[0]
    for i in s:
        i = i.split()
        print(i[0]+'		'+i[1]+'		'+i[2]+'		'+i[3]+'		'+i[4])# 实验要求为前五个文本

    2)、心得体会

    通过查看网站源代码寻找所要数据,从而确定寻找的标签是"tr",在获取文本后还要去掉一些与目标数据在相同位置但无用的文本,最后输出清洗过的文本即完成本次实验要求。


    作业②

    1)、GoodsPrices实验

    import requests
    import re
    # 仿浏览器访问淘宝网址防止反爬
    headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre"}
    keyword = "书包"   # 搜索关键词
    url = 'https://s.taobao.com/search?q=' + keyword  # 搜索接口
    # 获得html文本
    r = requests.get(url, timeout=30, headers=headers)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    html = r.text
    # 存储数据
    arr = []
    # 正则
    view_price = re.findall(r'"view_price":"[(d.)]*"', html)
    raw_title = re.findall(r'"raw_title":".*?"', html)
    for j in range(len(view_price)):
    	price = eval(view_price[j].split(':')[1])
    	name = eval(raw_title[j].split(':')[1])
    	arr.append([price, name])
    print("{:4}	{:8}".format("价格", "商品名称"))
    for a in arr:
    	print(a[0] + "	" + a[1])

    2)、心得体会

    刚开始爬取没用header,直接就被反爬了...从而使我深刻意识到header对于爬取一些网站的重要性。打开网页源代码,我们需要的价格和商品名称分别在"view_price"和"raw_title"中,所以对这两个位置进行爬取。正则出来的数据还需要处理,只取':'后的文本(用split方法将数据从':'处切片,取后部分),分别存入arr数组内,最后输出arr即完成本次实验要求。


    作业③

    1)、JPGFileDownload实验

    import re
    import urllib
    import requests
    from bs4 import BeautifulSoup
    import urllib.request
    import os
    headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre"}
    def catch(url):
        html = requests.get(url=url, headers=headers).text
        soup = BeautifulSoup(html, "lxml")
        tags1 = soup.find_all("img", attrs={"src": re.compile('jpg$')})  # 爬取以jpg结尾的图片
        tags2 = re.findall("/attach.*?jpg", html)
        tags3 = re.findall("/attach.*?JPG", html)
        return tags1, tags2, tags3
    def get_jpg(tags1, tags2, tags3):
        jpg = []
        name = []
        for image in tags1:
            # 判断图片链接是否为相对路径
            if image["src"][0] == "/":
                image["src"] = "http://xcb.fzu.edu.cn" + image["src"]
            jpg.append(image["src"])
            name.append(image["src"].split('/')[-1])
        for image in tags2:
            img = "http://xcb.fzu.edu.cn" + image
            jpg.append(img)
            name.append(img.split('/')[-1])
        for image in tags3:
            img = "http://xcb.fzu.edu.cn" + image
            jpg.append(img)
            name.append(img.split('/')[-1])
        return jpg, name
    # 存储在当前文件夹的path文件夹中
    def save(path, jpg, name):
        if not os.path.exists(path):
            os.mkdir('picture')  # 在当前文件夹创建文件夹
        for i in range(len(jpg)):
            urllib.request.urlretrieve(jpg[i], path + '/' + name[i]
    try:
        url = "http://xcb.fzu.edu.cn/"  # 福大宣传部网站
        save_path = r"picture"  # 存储文件夹名
        tags1, tags2, tags3 = catch(url)
        jpg, name = get_jpg(tags1, tags2, tags3)
        save(save_path, jpg, name)
    except Exception as err:
        print(err)

    2)、心得体会

    这次需要爬取的JPG文件中,分为三部分。第一部分通过正常爬取以jpg结尾的图片链接就行;第二部分需要判断图片链接是否为相对路径,如果是相对路径的话,还得在该图片链接前补充"http://xcb.fzu.edu.cn"才可使用;第三部分是网页中那五张校园风光的图片。因为它们跟其他图片的格式不一样,有的人在爬取的时候会漏掉它们。其中还有一张图片有个"小坑",是以"JPG"结尾而不是像另外四张一样是以"jpg"结尾。所以这部分的五张图片我用了两次findall爬取。我认为这次实验的难点就是这三部分图片的爬取,另外在图片名的存储以及存储位置这两个地方也需要花点心思。

  • 相关阅读:
    如何判断 DataRow 中是否存在某列????
    jquery操作table中的tr,td的方法双击dblclick attr parent id原创
    oracle 取当天日期减一天 应该如何写
    走出“搜索引擎营销”三个误区
    解决方案是什么
    强制远程连接 命令
    ORACLE 异常错误处理
    HttpClient是否有默认并发数限制?
    多线程下载程序的功能需求
    STL线程库简介
  • 原文地址:https://www.cnblogs.com/lkx15260/p/13733619.html
Copyright © 2011-2022 走看看