資料採集第一次作業 2022

2022-09-13 03:39:12 字數 3780 閱讀 4172

作業1:

題目:要求用urllib和re庫方法定向爬取給定**2020中國最好學科排名的資料。輸出資訊如下:

2020排名

全部層次

學校型別總分1

前2%中國人民大學

1069.0

2...

...  

...解題:

url=""

headers=

req=urllib.request.request(url,headers=headers)

data=urllib.request.urlopen(req)# 傳送請求

soup=data.read().decode('utf-8')# 解析網頁

1.2根據網頁結點資訊構造正規表示式

1.3輸出**

tplt = "\t<10}\t\t"

print(tplt.format("2020排名", "全部層次", "學校名稱", "總分", chr(12288)))

for i in range(len(rank)):

print(tplt.format(rank[i],level[i],school[i],score[i],chr(12288)))

#中英文混排時採用chr(12288)

1.4輸出結果

作業2:

要求:用requests和beautiful soup庫方法設計爬取

aqi實時報。

輸出資訊:

序號城市

aqipm2.5

....

....1北京

......

解題獲取http

使用requests進行get請求:

url = ""

response = requests.get(url)

html = response.text

# 使用快取,防止被ban

# with open('./.cache/aqiweb2.html', 'r', encoding='utf-8') as f:

# html = f.read()

同上,新增乙個快取。

構建soup,解析**

這裡需要先解析下圖中選中部分的**:

使用beatiful soup進行解析:

# 構建soup物件

soup = beautifulsoup(html, "lxml")

# 解析**

table = soup.find('div', attrs=).table.tbody

提取資料

檢視該**,發現該tbody內,tr均勻排列,且各個tr內的td內容即為需要的資料(即td.text):

因此,只需要進行兩層遍歷,就能提取出所有資訊:

i = 0

for tr in table.find_all('tr'):

print("".format(i), end='\t')

for td in tr.find_all('td'):

print("".format(strq2b(clear_data(td.text))), end='\t')

print()

i += 1

2、執行結果

作業3要求:使用urllib和requests爬取(

解題獲取html

由於該題要求使用urllib.request和requests進行爬取,索性將兩種方法結合快取(即讀取本地檔案)整合成乙個函式,由使用者選擇請求方法。

構建乙個get_html函式,輸入url以及請求方法,返回html文字:

def get_html(url: str, request_type: str) -> str:

"""獲取html

:param url: 訪問位址

:param request_type: 請求方式: urllib.request 或 urllib.request 或相應快取

:return: html

"""if request_type == "urllib.request":

# urllib.request

return urllib.request.urlopen(url).read().decode("utf-8")

elif request_type == "requests":

# requests

response = requests.get(url)

return response.text

else:

# 讀取快取檔案

with open(f'./.cache/.html', 'r', encoding='utf-8') as f:

return f.read()

解析使用正則匹配的方式,將所有的

標籤內的src提取出來:

imglist = re.findall(r'儲存

resp = requests.get(img_url)

with open(f'./download/', 'wb') as f:

f.write(resp.content)

使用字串分割從url中提取出檔案的名稱(保證字尾名無誤):

img.split("/")[-1]

或以"."進行分割,僅提取字尾名,自己對檔案進行標號命名。

最後使用f.write(resp.content)即可實現儲存。

def get_imgs(html:str, download=true) -> none:

""":param html: 輸入html

:return: none

"""imglist = re.findall(r'執行結果

資料採集第一次作業

如下 import requests from bs4 import beautifulsoup import bs4 import urllib from bs4 import unicodedammit url try headers req urllib.request.request url...

資料採集技術第一次作業

作業要求 用requests和beautifulsoup庫方法定向爬取給定 的資料,螢幕列印爬取的大學排名資訊。import requests from bs4 import beautifulsoup url headers r requests.get url url,headers heade...

2022寒假第一次作業彙總

這個作業屬於哪個課程 2022物件導向程式設計 這個作業要求在 2022面向程式物件設計寒假作業1 這個作業的目標 1 學習markdown語法 2 自我介紹 3 安裝並學學習git的基本使用 4 註冊github賬號,並建立倉庫,編輯自我介紹,並提交commit 5 選擇並配置乙個適合自己的ide...