#from urllib import request
from urllib.requestimport urlopen
#from urllib.request import Request
from urllib import parse
from bs4 import BeautifulSoup
import re
#請求url并把結(jié)果用UTF-8編碼
resp = urlopen("https://en.wikipedia.org/wiki/Main_Page").read().decode("utf-8")
#使用BeautiSoup去解析
soup = BeautifulSoup(resp,"html.parser")
#獲取所有以/wiki/開頭的a標(biāo)簽的href屬性
listUrls = soup.find_all("a",href=re.compile("^/wiki/"))# ^表示是以wiki開頭的赔癌,不是保護(hù)wiki的 扬卷, find_all返回的可以是一個正則表達(dá)式對象
# print(listUrls)
for urlin listUrls:
print(url["href"])
print("#########################################################")
#輸出所有詞條對應(yīng)名稱和url
for urlin listUrls:#循環(huán)記得加冒號
#過濾以.jpg或者.JPG結(jié)尾的鏈接
? ? if not re.search("\.(jpg|JPG)$",url["href"]):#if記得加冒號 \.表示字符點號 $表示結(jié)尾
? ? print(url.get_text(),"-------","https://en.wikipedia.org" + url["href"])#輸出url的href的屬性 有冒號的地方就要縮進(jìn)
總結(jié):urllib與BeautifulSoup
常用的方法urlopen舶得,它可以用來請求一個地址催跪,read()方法可以讀取里面的內(nèi)容,decode內(nèi)容就可以進(jìn)行編碼惯豆。
BeautifulSoup自帶utf-8的編碼颜阐,所以在urlopen處寫不寫都可以。
代碼中傳給BeautifulSoup的解析器是Python自帶的解析器html.parser
獲取文字內(nèi)容的方法有兩個一個是.string掉丽,還有一個是.get_text()跌榔,區(qū)別是前者只能獲取一個,后者是獲取標(biāo)簽下所有的文字捶障。