簡介
Python – Crawler -找尋網頁中指定資料並排序(1)
上次有介紹過一篇爬蟲,整合了bs4與newspaper圖文並茂的排序方法,由於newspaper抓出來的文章元素都已經被該套件歸類了,所以我們要製作自己的客制表單話,就必須自己處理一下抓取的資料。
上篇所提供的方法是最暴力且比較冗長的寫法,這篇我就在修改了一版,並分享出來,不僅少了容器數量,也少了一些處理方式,但結果也是一樣,或是更好,讓我們看看吧。
實作
我這次先把重點拆成幾個部分,1.bs4抓下來的原始html、2.newspaper抓下來的內文與圖片、3.將bs4與newspaper處理並排序過。
上面列的三點在本篇我就拿第三點來說就好,因為前兩點基本上是都沒有改動,因為都是把資料拿來放在一個容器做比對使用。
import re
compare_list = []
index_list = []
#soup地方可以改看看、可能有不同結果
for word in str(soup).split('\n'):
#print(count,':',word)
dr = re.compile(r'<[^>]+>',re.S)
dd = dr.sub('',word)
#compare_list.append(dd)
if '<p' in word:
compare_list.append(dd)
else:
compare_list.append(word)
for i in compare_list:
for j in word_list:
if j in i:
print(j)
index_list.append(j)
我們直接看到程式碼,這邊我們只需要新增一個主要產出結果的『index_list』容器來儲存比較排列過後的圖文,與將bs4抓下來的html tag都去除掉來放置的容器(比對容器)。
在這邊我們也只用了兩個for-loop,一個是在將html tag除掉的處理流程,那要怎樣去除tag?我們在這篇有提到一些方法,這邊就不贅述。但在這有新增一個判斷式,來分辨是不是內文,通常許多的內文都是使用『<p>』把內容包起來,然而圖片的話當然就可能是其他的html tag來包著他。
再來看到第二個for-loop,就是直接把去除html tag的『compare_list』當作『被比較』的樣本,與『2.newspaper抓下來的內文與圖片』來比對,假如有內文相符的就把它儲存在『index_list』中,一切就完成了。
可以看到上述的兩張圖,處理前後,透過上面程式碼即可完成圖文排序了。
小結
就本次分享的主要處理部分,相較於上一篇的處理for-loop從5個變成2個,容器從4個變2個,處理效果一樣,不僅是程式碼簡潔了許多,並且在冗長的程式碼也是有可能在跑城市的同時累積了不必要的記憶體,以及可能會減少跑程式的錯誤率,我們在寫程式的過程中都是要持續的精益求精,不斷的使用適當的程式碼來撰寫。