第一次作業 結合三次小作業

2022-07-30 23:03:16 字數 4021 閱讀 4811

**如下:

import requests

from bs4 import beautifulsoup

import bs4

def get_text(url):

try:

r = requests.get(url)

r.raise_for_status() # 判斷狀態碼是否為200

return r.text

except:

print("異常") # 如果狀態碼不是200就會產生異常

return " "

def university_list(ulist, html):

soup = beautifulsoup(html, "html.parser")

for tr in soup.find('tbody').children: # 查詢的子節點

if isinstance(tr, bs4.element.tag): # 剔除不需要的資訊

tds = tr('td')

# 要用strip()去除文字中的空格,不然內容為none時會報錯

# 把td資訊存入ulist中

def university_rank(ulist, num):

# :中間的部分用第五個元素填充,即chr(12288)所表示的空格

template = "\t^10}\t^10}\t^10}\t"

print(template.format("排名", "學校名稱", "省市", "型別", "總分", chr(12288))) # chr(12288)中文空格

for i in range(num):

u = ulist[i]

print(template.format(u[0], u[1], u[2], u[3], u[4], chr(12288)))

def main():

university_info =

url = ""

html = get_text(url)

university_list(university_info, html)

university_rank(university_info, 76)

if __name__ == '__main__':

main()

執行結果:

通過這次作業,主要了解了beautifulsoup對html文件節點查詢的應用,其中的過程並不複雜,主要是要注意爬取內容的格式處理,因為我們輸出這個排名是給定了乙個輸出樣板的,輸出樣板的格式必須要能與輸出的資料對應才能正確輸出結果,剛開始執行時就因為沒有去除空格而導致unsupported format string passed to nonetype.__format__的報錯。

**如下:

import requests

import re

def get_text(url):

# cookie:乙個 web 站點為每乙個訪問者產生乙個唯一的id,以 cookie 檔案的形式儲存在每個使用者的機器上

kv =

try:

r = requests.get(url, headers=kv, timeout=30)

# 使響應的內容的編碼方式準確

return r.text

except:

return ""

def parse_info(info_list, html):

try:

price_list = re.findall(r'"view_price":"[\d.]*"', html)

title_list = re.findall(r'"raw_title":".*?"', html)

for i in range(len(price_list)):

# 此時的price_list儲存的資訊格式為"view_price":"**"

# 用split除去冒號後,第二個資料即為所求**

price = eval(price_list[i].split(':')[1])

title = eval(title_list[i].split(':')[1])

except:

print("")

def goods_price(info_list):

# 給format輸出形式定義一種樣板

template = "\t\t"

# 方便統計輸出的商品資訊數

count = 0

print(template.format("序號", '**', '商品名'))

for i in info_list:

count = count + 1

print(template.format(count, i[0], i[1]))

def main():

# 建立乙個空列表用來儲存商品的**資訊

info_list =

key = '辣條'

url = '' + key

html = get_text(url)

parse_info(info_list, html)

goods_price(info_list)

if __name__ == '__main__':

main()

執行結果:

這次作業的第乙個難點就是爬取電商**會被反爬從而出現爬取失敗的結果,在網上看了幾種解決方法,在**內加入了自己的cookie碼同時爬取盡量少的內容,最後可以輸出結果。然後不同的電商**儲存資料的格式是不一樣的,爬取前要先檢視原始碼來定義爬取格式,就能正確輸出結果了。

**如下:

import urllib.request

import re

from bs4 import beautifulsoup

def get_html(url):

res = urllib.request.urlopen(url)

html = res.read()

return html

def parse_html(htmlfile):

mysoup = beautifulsoup(htmlfile, 'html.parser')

# 通過檢視學校官網源**,發現學校開頭均為

picture_src = mysoup.findall('img')

img_re = re.compile(r'src="(.*?)"')

for i in range(len(picture_src)):

s = str(picture_src[i])

img_url = re.findall(img_re, s)

if img_url:

# 此時的url可能含有weight等引數,所以取第乙個字串(剛好是**)

執行結果:

第一次作業 結合三次小作業

用requests和beautifulsoup庫爬取上的大學排名 import requests import bs4 from bs4 import beautifulsoup 從網路上獲取大學排名網頁的內容 def gethtmltext url try r requests.get url,t...

第一次作業 結合三次小作業

1 實驗要求 用requests和beautifulsoup庫方法定向爬取給定 的資料,螢幕列印爬取的大學排名資訊。2 實驗 import requests import bs4 from bs4 import beautifulsoup def gethtmltext url try r requ...

第一次作業 三次小作業

1.用requests和beautifulsoup庫方法定向爬取給定 的資料,螢幕列印爬取的大學排名資訊。列印示例 排名 學校名稱 省市 學校型別 1 清華大學 北京 綜合 from bs4 import beautifulsoup import urllib.request url req url...