**如下:
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...