数据采集与融合技术作业一

发布时间 2023-09-23 15:33:00作者: Chen'coke

题目一

# 要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,
# 屏幕打印爬取的大学排名信息。
#102102138陈培庆
from bs4 import BeautifulSoup
from bs4 import UnicodeDammit
import urllib.request
def daxue():
    # 要爬取的网站
    url="http://www.shanghairanking.cn/rankings/bcur/2020"
    req=urllib.request.Request(url)
    data=urllib.request.urlopen(req)
    # 读取网站信息
    data=data.read()
    dammit=UnicodeDammit(data,["utf-8","gbk"])
    data=dammit.unicode_markup
    # beautifulsoup解析网页内容
    soup=BeautifulSoup(data,"html.parser")
    # 使用css语法查找元素,查找<tbody>下的<tr>标签,返回一个列表,列表中存储每个大学的信息
    list=soup.select("tbody tr")
    tplt = "{0:^13}\t{1:^13}\t{2:^13}\t{3:^10}\t{4:^10}"
    print(tplt.format("排名","学校","省市","类型","总分",chr(12288)))
    for item in list[0:40]:
        ls=item.select("td")
        length=len(ls)
        count=0
        inf=[]
        for i in ls[0:5]:
            count+=1
            text = i.text.replace(" ", "").replace("\n", "")
            inf.append(text)
        #    依次输出大学信息
        print(tplt.format(inf[0],inf[1],inf[2],inf[3],inf[4],chr(12288)))
daxue()
  • 运行结果示意
  • 心得体会
    学会了css算法的使用

题目二

  • 要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。
# 要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,
# 以关键词“书包”搜索页面的数据,爬取商品名称和价格。
#102102138陈培庆
import os
import pickle
import time
from bs4 import BeautifulSoup
import re
from selenium import webdriver
from selenium.webdriver.common.by import By

#自动打开网站
j = 0
#提前爬取cookie进行读取实现免登录
def readTaobaoCookies():
    # if hava cookies file ,use it
    # if not , getTaobaoCookies()
    if os.path.exists('jdCookies.pickle'):
        readPath = open('jdCookies.pickle','rb')
        jdCookies = pickle.load(readPath)
    return jdCookies
jdCookies = readTaobaoCookies()

def FindGoods(html):
    soup = BeautifulSoup(html, "lxml")
    lis = soup.select("ul[class='gl-warp clearfix'] li")
    lis = soup.find_all("li", {"data-sku": re.compile("\d+")})
    for li in lis:
        price1 = li.find("div", attrs={"class": "p-price"}).find("strong").find("i")
        price = price1.text
        name1 = li.find("div", attrs={"class": "p-name"}).find("a").find("em")
        name = name1.text.strip()
        j = j + 1
        t = '\t'
        print(j, t, name, t, price)
try:
    browser = webdriver.Chrome()  # 创建browser对象
    goods = input('请输入您想爬取的商品:')
    browser.get("https://www.jd.com")
    for cookie in jdCookies:
        browser.add_cookie({
            "domain": ".jd.com",
            "name": cookie,
            "value": jdCookies[cookie],
            "path": '/',
            "expires": None
        })
    input_element = browser.find_element(By.ID, "key")  # 使用 id 属性定位输入框
    input_element.send_keys(goods)  # 输入要搜索的商品
    searchbutton = browser.find_element(By.CSS_SELECTOR, 'button[clstag="h|keycount|h|keycount|head|search_a"]')
    searchbutton.click()
    time.sleep(10)
    browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    html = browser.page_source
    print("序号\t商品名称\t\t\t\t\t\t\t\t价格")
    FindGoods(html)
except Exception as err:
    print(err)
  • 运行结果示意
  • 心得体会
    由于出现反爬,利用webdriver登录网页,进行网页爬取,学习了webdriver的相关内容,掌握了cookies的使用方法,提前获取cookies,从而实现免登录爬取界面

题目三

# 要求:爬取一个给定网页( https://xcb.fzu.edu.cn/info/1071/4481.htm)或者自选网页的所有JPEG和JPG格式文件
# 输出信息:将自选网页内的所有JPEG和JPG文件保存在一个文件夹中
# 102102138陈培庆
from bs4 import BeautifulSoup
import re
import urllib.request
import time
from selenium import webdriver
browser = webdriver.Chrome()	# 创建browser对象
#自动打开网站
browser.get('https://xcb.fzu.edu.cn/info/1071/4481.htm')
i = 1
time.sleep(15)
browser.maximize_window()
html = browser.page_source
soup = BeautifulSoup(html, "lxml")
imagelist = []
lis = soup.select("img")
x = 1
for ls in lis:
    if str(ls["src"])[-4:] == "jpeg" :
        imageurl = "https://xcb.fzu.edu.cn" + str(ls["src"])
        imagename = "C:/Users/88561/Desktop/爬取/" + str(x) + ".jpeg"
    elif str(ls["src"])[-3:] == "jpg":
        imageurl = "https://xcb.fzu.edu.cn" + str(ls["src"])
        imagename = "C:/Users/88561/Desktop/爬取/" + str(x) + ".jpg"
    print(imageurl)
    x = x + 1
    try:
        urllib.request.urlretrieve(imageurl, filename=imagename)
    except urllib.error.URLError as e:
        print(e)
  • 运行结果示意
  • 心得体会
    下载文件时应该注意原文件的格式,不然会导致爬取后,文件图片无法打开