#from urllib import request
from urllib.requestimport urlopen
#from urllib.request import Request
from urllib import parse
from bs4 import BeautifulSoup
import re
#请求url并把结果用UTF-8编码
resp = urlopen("https://en.wikipedia.org/wiki/Main_Page").read().decode("utf-8")
#使用BeautiSoup去解析
soup = BeautifulSoup(resp,"html.parser")
#获取所有以/wiki/开头的a标签的href属性
listUrls = soup.find_all("a",href=re.compile("^/wiki/"))# ^表示是以wiki开头的,不是保护wiki的 , find_all返回的可以是一个正则表达式对象
# print(listUrls)
for urlin listUrls:
print(url["href"])
print("#########################################################")
#输出所有词条对应名称和url
for urlin listUrls:#循环记得加冒号
#过滤以.jpg或者.JPG结尾的链接
if not re.search("\.(jpg|JPG)$",url["href"]):#if记得加冒号 \.表示字符点号 $表示结尾
print(url.get_text(),"-------","https://en.wikipedia.org" + url["href"])#输出url的href的属性 有冒号的地方就要缩进
总结:urllib与BeautifulSoup
常用的方法urlopen,它可以用来请求一个地址,read()方法可以读取里面的内容,decode内容就可以进行编码。
BeautifulSoup自带utf-8的编码,所以在urlopen处写不写都可以。
代码中传给BeautifulSoup的解析器是Python自带的解析器html.parser
获取文字内容的方法有两个一个是.string,还有一个是.get_text(),区别是前者只能获取一个,后者是获取标签下所有的文字。
网友评论