Python網絡爬蟲中常用第三方庫總結


python對於爬蟲的編寫已經是相當的友好了,不過除了利用requests庫或者scrapy框架之外,有一些庫還需要我們知道,以便於我們更熟練、便捷的完成目標數據的爬取,接下來我就總結一下我認為在爬蟲中常用的幾個庫。

一、re

re庫是正則表達式庫,是regex的縮寫,用於從網頁源碼或者數據文件中提取我們所需的數據,具體使用方法如下:

①闖進過濾字符串的規定,一般用變量regex存儲;

②將規則編譯:pattern = re.compile(regex)

③使用規則進行查找:content = re.findall(pattern, html)

對於re庫來說,最難的便是編寫出相應的過濾規則,曾看到過這樣一句話:如果一個問題你用了正則,那么就變成了兩個問題。  接觸過正則的也都知道它確實存在一定的難度性,下面是我對常用的符號用法的總結:

‘*’:匹配前面的子表達式零次或無數次;‘+’:匹配前面的子表達式一次或無數次;

‘.’:匹配除換行符\n以外的任何單字符;‘?‘:匹配前面的子表達式零次或一次;

’^':匹配輸入字符串開始位置;‘$’:匹配輸入字符串的結尾位置

‘\w':匹配字母、數字、下划線;’\d‘:匹配數字;

’\s':匹配空格;反義:將前面的字母改為大寫,即指原義的反義;

‘{n}’:重復n次;‘{n,m}’:重復n到m次;

‘{n, }':重復n次或更多次;’?<=exp‘:匹配exp后的信息;如 How are you:(?<txt>(?<=How).+)

‘(?=exp)’:匹配exp前面的位置,如 How are you doing:(?<txt>.+(?=ing)) 這里取ing前所有字符,並定義txt為捕獲分組名。

二、json

json是本身是一種存儲格式,與python中的字典比較類似。因為我們在爬取時可能直接爬取到json格式數據,或者為方便后面的  使用需要將爬取數據轉為json數據。因此學會運用json庫,可以更加方便地提取我們所需數據。json中常用操作有:
①dumps:將python對象編碼成json字符串。
其中一個參數為ensure_ascii,默認為True,若出現non-ascii字符,則出現\uxxxx,設為False即可。
②loads:用於解碼json數據,返回python字段數據類型。
③encode:在轉json文件時將文件編碼轉為utf-8
④decode:用於轉為python類型時文件的解碼。

三、xpath

同樣是數據解析包,得到網頁響應后傳入xpath表達式,結果返回表達式所對應所有節點列表,如scrapy中:response.xpath()。
extract():在提取節點中特定數據時后面要加,序列化該節點為unicode字符串並返回列表,后面可跟encode轉碼。如:
item['workType'] = data.xpath('./td[2]/text()').extract()[0]
xpath提取例子
①/html/head/title/text():選擇<html>下<head>下<title>元素的文字。
②//td:選擇所有<td>元素,用 | 實現或操作,用 and 實現且操作。
③//div[@class='mine']:選擇所有具有class='mine'屬性的div元素,返回節點列表。
注:若要提取鏈接,定位到標簽內部吼,后面加上 /@href 即可獲取到標簽內的鏈接。

四、threading

該庫是Python中實現多線程加速的第三方庫,具體用法如下:
①創建待加速函數,如爬取函數spider(url)。
②對每個url創建多線程:threading.Thread(target=spider, args=(u,));
注意:在Thread中的參數分別是待加速函數和待加速函數的參數,這兩個是分開寫的!!
③隨后使用.start()開始加速,將所創多線程加入到所建threadlist中。
④最后使用 .join() 即可, 遍歷threadlist,完成加速

五、multiprocessing

multiprocessing一般用來實現多進程加速,使用方法類似於threading,具體如下:
①一般使用from multiprocessing import Process 導入多進程加速方法。
②創建待加速函數,如爬取函數spider(url)。
對每個url創建多進程:p = Process(target=spider, args=(u,));
注意:在Process中的參數與上述多線程加速一樣,也將函數與所傳參數分開寫!!
④最后使用 p.start() 即可。

六、pymysql

pymysql提供了python與mysql數據庫相連的接口,即利用該庫可以實現python與mysql數據庫的連接,具體操作如下:
①創建連接:conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='對應名', charset='utf-8')
②創建游標:cursor = conn.cursor()
③執行sql語句,並返回受影響行數:effect_row = cursor.execute("select * from table")
④提交:conn.commit()
⑤關閉游標與連接:cursor.close(); conn.close()

七、mechanize

利用mechanize,可以實現對瀏覽器行為更好的模擬,常用有以下模擬方法:
①Browser():創建(打開)瀏覽器。
②open():打開網頁。
③links():獲取網頁中所有鏈接;可以遍歷 links() 方法,其下還有 .base_url 與 .url 屬性。
④forms():獲取所有表單。
⑤form[‘form_name’]:填寫名為form_name表單中的信息。
⑥submit():提交表單。
⑦response().read():查看提交表單后的結果。
⑧addheaders變量:存放用於欺騙服務器的表頭。
mechanize中包含了許多模擬瀏覽器設置,如處理機器人協議等,具體使用時,具體查詢即可,常用的一系列設置如下:
#options
br.set_handle_equiv(True)
#br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

#Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.set_debug_http(True)
br.set_debug_redirects(True)
br.set_debug_responses(True)

八、readability

readability是專門用於網頁正文內容提取的第三方庫,平時用的不多,但是可以輕松實現提取:
①導入:from readability.readability import Document
②使用:
正文:readable_article = Document(urllib.urlopen(url).read()).summary()
題目:readable_title = Document(urllib.urlopen(url).read()).short_title()


以上八個庫便是在完成爬蟲時常需借助的第三方庫,願能夠為大家帶來幫助。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com