第9課、解析網頁中的元素-四周學會爬蟲系統
阿新 • • 發佈:2018-10-28
ini bsp tip 好的 python3 pycharm har tle erp
目標:爬取本地網頁中,評分大於3的文章,並打印出來
準備:
- 安裝Python3.0。
- 安裝PyCharm,用於開發Python的集成環境。
- 安裝BeautifulSoup庫,學習爬蟲需要的庫。
BeautifulSoup:是一個可以從HTML和XML中讀取數據的庫。庫也叫模塊,在笨辦法學Python中叫做特征,是其他程序員開發好的一些代碼,可以拿來導入(import),然後調用。開發之前最好先學習一下Python的基本知識,《笨辦法學python》或者是《編程小白的第一本python》都是不錯的選擇。
思路:
- 使用BeautifulSoup解析本地網頁
- 獲取所需的信息標簽
- 精簡獲取的信息
代碼:
1 from bs4 import BeautifulSoup 2 # BeautifulSoup從HTML和XML中讀取數據的庫 3 4 info = [] 5 # 定義一個名為info的列表 6 7 with open(‘/Users/my/Desktop/lesson9/new_index.html‘,‘r‘) as wb_data: 8 Soup = BeautifulSoup(wb_data,‘lxml‘) 9 # 在開發的過程中,許多對象在使用後,都會執行一條或者多條語句來關閉,釋放等操作,這樣累贅的操作就會讓人忘記,with語句就可以解決這些問題。10 # 將文件以wb_data的名字打開 11 # 打開之後再用beautifulSoup解析網頁 12 13 # 粗略的獲取需要信息的標簽 14 # 依次是圖像、標題、描述、標簽、評分 15 images = Soup.select(‘body > div.main-content > ul > li > img‘) 16 titles = Soup.select(‘body > div.main-content > ul > li > div.article-info > h3 > a‘) 17 descs = Soup.select(‘body > div.main-content > ul > li > div.article-info > p.description‘) 18 rates = Soup.select(‘body > div.main-content > ul > li > div.rate > span‘) 19 cates = Soup.select(‘body > div.main-content > ul > li > div.article-info > p.meta-info‘) 20 # print(images,titles,descs,rates,cates,sep=‘\n---------------------------------\n‘) 21 22 # 精簡獲取的信息,留下自己有用的東西 23 # for循環可以遍歷任何序列的項目 24 for title,image,desc,rate,cate in zip(titles,images,descs,rates,cates): 25 data = { 26 ‘title‘: title.get_text(), # get_text()去除html標簽,獲得文本信息。 27 ‘rate‘: rate.get_text(), 28 ‘desc‘: desc.get_text(), 29 ‘cate‘: list(cate.stripped_strings), # stripped_strings獲得一個父級標簽下所有子標簽的文本信息 30 ‘image‘: image.get(‘src‘), # get()獲得某個標簽的屬性 31 } 32 info.append(data) #append在列表末尾添加新的對象 33 34 # 打印評分大於3的文章 35 for i in info: 36 if float(i[‘rate‘]) >3: 37 print(i[‘title‘],i[‘cate‘],i[‘rate‘])
遇到問題:
1. 安裝BeautifulSoup庫時,PyCharm提示Error錯誤
原因:教程中使用的是Python2,而自己機子使用的是Python3,要想安裝BeautifulSoup,需要搜索bs4。具體步驟:打開PyChram,在File中找到Setting,搜索project Interpreter。然後在右側點擊“+”,搜索bs4,安裝就可以看到BeautifuSoup庫。
2. 輸入的錯誤,在輸入的時候多了一個空格或者少了一個空格而報錯。
如在:
rates = Soup.select(‘body > div.main-content > ul > li > div.rate > span‘)
之前加了一個空格就會報錯。變成了(rate前面有一個空格)
rates = Soup.select(‘body > div.main-content > ul > li > div.rate > span‘)
需要仔細檢查,嚴格按照格式書寫。
第9課、解析網頁中的元素-四周學會爬蟲系統