爬虫5-BeautifulSoup模块简解2
生活随笔
收集整理的這篇文章主要介紹了
爬虫5-BeautifulSoup模块简解2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.BeautifulSoup簡解2?
from bs4 import BeautifulSoup import re file = open("./baidu.html",'rb') html = file.read() bs = BeautifulSoup(html,"html.parser") # 解析內容 解析器# 1 Tag 標簽及其內容:拿到它所找到的第一個內容 print(bs.title) # <title>Title</title> print(bs.title.string) # Title print(bs.a) # 拿到第一個出現的標簽及所有內容 print(type(bs.a)) # Tag html里的標簽# # 2 NavigableString 標簽里的內容 print(bs.a.attrs) print(bs.a.string)# 3 BeautifulSoup 表示整個文檔 print(type(bs)) print(bs.name) print(bs.attrs) print(bs)# 4Comment 是一個特殊的NavigableString 輸出的內容不包含注釋符號 print(type(bs.a.string))# ------------------------------應用----------------------------------# 文檔的遍歷 print(bs.head.contents) # 獲取Tag的所有子節(jié)點,返回一個list print(bs.head.contents[3]) # 獲取內容# 文檔的搜索 # (1)find_all() # 字符串過濾,會查找與字符串完全匹配的內容 t_list= bs.find_all('a') print(t_list)# 正則表達式搜索 :使用search()方法來匹配內容 t_list = bs.find_all(re.compile("a")) # 包含a的所有標簽及其字樣的所有內容 print(t_list)# # 用方法:傳入一個函數,根據函數要求搜索 def name_is_exists(tag):return tag.has_attr("name") t_list = bs.find_all(name_is_exists) print(t_list)# kwargs 參數 t_list = bs.find_all(id="head") for i in t_list:print(i)t_list = bs.find_all(class_=True) print(t_list) t_list = bs.find_all(href="http://news.baidu.com") print(t_list)# 3.text參數 t_list = bs.find_all(text='hao123') print(t_list) t_list = bs.find_all(text=['hao123','地圖','貼吧']) print(t_list) t_list = bs.find_all(text=re.compile("\d"))# 用正則表達式來查找包含特定文本的內容 print(t_list)# 4.limit t_list = bs.find_all('a',limit=3) print(t_list)# CSS 選擇器 print(bs.select('title')) # 通過標簽來查找 print(bs.select('.mnav')) # 通過類名來查找 print(bs.select('#ul')) # 通過id來查找 print(bs.select("a[class='bri']")) # 通過屬性來查找 t_list = bs.select("head > title") print(t_list[0]) # <title>Title</title> print(t_list[0].get_text()) # Title2、應用
from bs4 import BeautifulSoup import re import urllib findLink = re.compile(r'<a href=(.*?)>') findimg = re.compile(r'<img.*src="(.*?)"', re.S) findtitle = re.compile(r'<span class="title">(.*?)</span>', re.S) findscore= re.compile(r'<span class="rating_num" property="v:average">(.*?)</span>', re.S) findjudge = re.compile(r'<span>(\d+)人評價</span>', re.S) findInq = re.compile(r'<span class="inq">(.*)</span>', re.S) findBd = re.compile(r'<p class="">.*?</p>',re.S) def main():baseurl = "http://movie.douban.com/top250?start="# 1.爬取網頁datalist = getData(baseurl)# 3.保存數據savepath =r'.\\豆瓣電影top250.xls'# saveData(savepath)# askURL("http://movie.douban.com/top250?start=0")# 爬取網頁 def getData(baseurl):datalist = []for i in range(0,1):url = baseurl + str(i*25)html = askURL(url) # 保存獲取到的網頁源碼# 2.逐一進行解析soup = BeautifulSoup(html,"html.parser")for item in soup.find_all('div',class_="item"): # 查找符合要求的字符串 形成列表# print(item)data = [] # 保存一部電影的所有信息# 影片詳情的鏈接item = str(item)link = re.findall(findLink,item)[0] #通過正則表達式查找指定的字符串data.append(link)imgsrc = re.findall(findimg,item)data.append(imgsrc)titles = re.findall(findtitle, item)if len(titles)==2:ctitle=titles[0]data.append(ctitle)otitle = titles[1].replace("/","")data.append(otitle)else:data.append(titles[0])data.append(' ') # 留空score = re.findall(findscore, item)[0] # 評分data.append(score)judgenum = re.findall(findjudge, item)[0] # 評價人數data.append(judgenum)inq = re.findall(findInq, item) # 概述if len(inq)!=0:inq = inq[0].replace(". ","")data.append(inq)else:data.append(" ")bd = re.findall(findBd, item)[0] # 導演bd = re.sub('<br(\s+)?/>(\s+)?'," ",bd)bd = re.sub('/', "", bd)data.append(bd.strip()) # 去掉前后的空格print(data)datalist.append(data)return datalistdef askURL(url):head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"" Chrome/89.0.4389.128 Safari/537.36"} #用戶代理 我們是什么類型的機器(本質告訴瀏覽器 我們接收什么樣的信息)request = urllib.request.Request(url, headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode('utf-8')# print(html)except urllib.error.URLError as e:if hasattr(e,"code"):print(e.code)if hasattr(e,"reason"):print(e.reason)return html# 3.保存數據 def saveData(savepath):passif __name__=="__main__":main()?
總結
以上是生活随笔為你收集整理的爬虫5-BeautifulSoup模块简解2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python如何实现模拟登录_超详细的P
- 下一篇: C++基础17-纯虚函数和抽象类