真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python爬蟲中流程框架和常用模塊是什么

小編給大家分享一下Python爬蟲中流程框架和常用模塊是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比烏審網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式烏審網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋烏審地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。

一、簡單爬蟲架構(gòu)

首先學(xué)習(xí)爬蟲之前呢,要知道爬蟲的一個基本架構(gòu),也就是寫代碼得有層次結(jié)構(gòu)吧?不然擠牙膏么?

爬蟲調(diào)度器 -> URL管理器 -> 網(wǎng)頁下載器() -> 網(wǎng)頁解析器() -> 價值數(shù)據(jù)

其中最重要地方,莫過于三君子-管理,下載,解析器。

Python爬蟲中流程框架和常用模塊是什么

這就是個初代版本的簡單爬蟲架構(gòu),一個基本的架構(gòu)。

二、運行流程

實際上對于一些有開發(fā)基礎(chǔ)的人來看,這個東西已經(jīng)一目了然了,具體內(nèi)容我不說了。

Python爬蟲中流程框架和常用模塊是什么

具體過程:(細(xì)品,你細(xì)品~)

1、調(diào)度器詢問URL管理器,是否有待爬URL?URL管理器返回是/否?

2、如果是,調(diào)度器會從URL管理器中取出一個待爬URL;

3、調(diào)度器將URL傳給下載器,下載網(wǎng)頁內(nèi)容后返回給調(diào)度器;

4、調(diào)度器再將返回的網(wǎng)頁內(nèi)容發(fā)送到解析器,解析URL內(nèi)容,解析完成后返回有價值的數(shù)據(jù)和新的URL;

5、一方面,調(diào)度器將數(shù)據(jù)傳遞給應(yīng)用進行數(shù)據(jù)的收集;另一方面,會將新的URL補充進URL管理器,若有URL管理器中含有新的URL,則重復(fù)上述步驟,直到爬取完所有的URL

6、最后,調(diào)度器會調(diào)動應(yīng)用的方法,將價值數(shù)據(jù)輸出到需要的格式。

三、URL管理器和實現(xiàn)方法

定義:管理帶抓取URL集合和已抓取URL集合,

作用:防止重復(fù)抓取、防止循環(huán)抓取

URL管理器功能:

Python爬蟲中流程框架和常用模塊是什么

支持的功能

添加新URL到待爬取集合中

判斷待添加的URL是否在容器中

判斷是否還有帶待爬取URL

獲取待爬取URL

將URL從待爬取移動到已爬取

實現(xiàn)方式

Python爬蟲中流程框架和常用模塊是什么

1、適合個人的:內(nèi)存(計算機或服務(wù)器內(nèi)存)

2、小型企業(yè)或個人:關(guān)系數(shù)據(jù)庫(永久存儲或內(nèi)存不夠用,如 MySQL)

3、大型互聯(lián)網(wǎng)公司:緩存數(shù)據(jù)庫(高性能,如支持 set() 的 redis)

四、網(wǎng)頁下載器和urllib2模塊

將互聯(lián)網(wǎng)上URL對應(yīng)的網(wǎng)頁下載到本地的工具。

作用:網(wǎng)頁下載器類似于瀏覽器,會將互聯(lián)網(wǎng)對應(yīng)的網(wǎng)頁以HTML的形式下載到本地,存儲成本地文件或內(nèi)存字符串,然后進行后續(xù)的分析。

Python的網(wǎng)頁下載器種類

urllib / urllib2 (Python官方提供的基礎(chǔ)模塊)

requests(第三方插件,提供更為強大的功能)

(注意:python 3.x 以上版本把urllib2 和 urllib 整合到一起。所以引入模塊變成一個,只有 import urllib,以后你在python2中看到的urllib2在python3中用urllib.request替換~ )

舉例:

#py2
import urllib2
response = urllib2.urlopen(url) 
# 報錯NameError: name 'urllib2' is not defined,要改為
# py3
import urllib.request
response = urllib.request.urlopen(url)

個人覺得Urllib庫不好用,requests庫更好用。

urllib2抓取網(wǎng)頁的三種方法(以后用requests)

當(dāng)然,雖然urllib2用的要少一些了,但是還是要了解一下的

方法1:給定url,使用urllib 模塊的urlopen方法獲取網(wǎng)頁內(nèi)容

舉例:

這里我用的python3.x版本的urllib庫。

get請求:發(fā)送一個GET請求到指定的頁面,然后返回HTTP的響應(yīng)。

from urllib import request
print('第一種方法get請求')
url = 'http://www.baidu.com'
# 直接請求
response = request.urlopen(url)
# 獲取狀態(tài)碼,如果是200表示成功
print(response.status)
# 讀取網(wǎng)頁內(nèi)容
print(response.read().decode('utf-8')

因為read獲取到的byte編碼,改為decode(‘utf-8’)。

方法2:添加data,http header

模擬瀏覽器發(fā)送GET請求,就需要使用Request對象,通過往Request對象添加HTTP頭,我們就可以把請求偽裝成瀏覽器進行訪問:

User-Agent 有些 Server 或 Proxy 會檢查該值,用來判斷是否是瀏覽器發(fā)起的 Request .Content-Type

在使用 REST 接口時,Server 會檢查該值,用來確定 HTTP Body 中的內(nèi)容該怎樣解析。

添加頭信息舉例:

import urllib2
print "第二種方法"
from urllib import request
req = request.Request('http://www.baidu.com')
req.add_header('User-Agent', 'Mozilla/6.0')
response =  request.urlopen(req)
# 獲取狀態(tài)碼,如果是200表示成功
print(response.status)
# 讀取網(wǎng)頁內(nèi)容
print(response.read().decode('utf-8'))

方法3:添加特殊情景的處理器

模擬瀏覽器發(fā)送POST請求。

需要登錄才能訪問的網(wǎng)頁,要添加cookie的處理。使用HTTPCookieProcessor;

需要代理才能訪問的網(wǎng)頁使用ProxyHandler;

需要HTTPS加密訪問的網(wǎng)站使用HTTPSHandler;

有些URL存在相互自動跳轉(zhuǎn)的關(guān)系使用HTTPRedirectHandler進行處理。

圖示:

Python爬蟲中流程框架和常用模塊是什么

HTTPCookieProcessor的使用:

cookie中保存中我們常見的登錄信息,有時候爬取網(wǎng)站需要攜帶cookie信息訪問,這里用到了http.cookijar,用于獲取cookie以及存儲cookie,同時cookie可以寫入到文件中保存,一般有兩種方式http.cookiejar.MozillaCookieJar和http.cookiejar.LWPCookieJar()。

舉例:

import urllib2, cookielib
print "第三種方法"
# 創(chuàng)建cookie容器
cj = cookielib.CookieJar()
# 創(chuàng)建1個opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# 給urllib2安裝opener
urllib2.install_opener(opener)
# 使用帶有cookie的urllib2訪問網(wǎng)頁
response = urllib2.urlopen('http://www.baidu.com/')

上面都是對urllib2模塊來寫的,但是實戰(zhàn)中往往用requests,這個放到后面文章來說。

注意: python3用cookielib 模塊改名為 http.cookiejar,帶cookie的打印出來必須用opener.open(req).read().decode(‘utf-8’)來發(fā)送的請求才會帶上cookie,如果用urllib.request.urlopen()是不帶cookie的。

ProxyHandler代理的使用:

網(wǎng)站它會檢測某一段時間某個IP 的訪問次數(shù),如果訪問次數(shù)過多,它會禁止你的訪問,所以這個時候需要通過設(shè)置代理來爬取數(shù)據(jù)

import urllib.request
url = 'http://www.baidu.com'
proxy_handler = urllib.request.ProxyHandler({
    #代理服務(wù)器IP地址
    'http': 'http://111.13.100.91:80',
    'https': 'https://111.13.100.91:443'
})
opener = urllib.request.build_opener(proxy_handler)
response = opener.open(url)
# 獲取狀態(tài)碼,如果是200表示成功
print(response.status)
# 讀取網(wǎng)頁內(nèi)容
print(response.read().decode('utf-8'))

四、網(wǎng)頁解析器和使用

網(wǎng)頁解析器從HTML網(wǎng)頁字符串中提取出價值數(shù)據(jù)和新URL對象

Python網(wǎng)頁解析器種類

Python爬蟲中流程框架和常用模塊是什么

正則表達式(re模糊匹配)

html.parser (Python自帶)

BeautifulSoup (第三方插件)

lxml (第三方解析器)

后面三種是以結(jié)構(gòu)化解析的方式進行解析DOM(Document Object Model)樹,

【也就是按照html的節(jié)點路徑一級一級來解析的?!?/p>

Python爬蟲中流程框架和常用模塊是什么

下面挨個介紹一下最常用的兩個。

常用的BeautifulSoup介紹?。?!

bs4主要使用find()方法和find_all()方法來搜索文檔。

find()用來搜索單一數(shù)據(jù),find_all()用來搜索多個數(shù)據(jù)。

它是Python第三方庫,用于從HTML或XML中提取數(shù)據(jù)

官網(wǎng):https://www.crummy.com/software/BeautifulSoup/

中文文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

需要安裝和測試:

方法一,在cmd窗口中:

安裝:pip install beautifulsoup4
測試:import bs4

方法2:在pycharm中:File–settings–Project Interpreter–添加beautifulsoup4(簡寫bs4)

語法:

Python爬蟲中流程框架和常用模塊是什么

舉個例子:

from bs4 import BeautifulSoup
# 根據(jù)HTML網(wǎng)頁字符串創(chuàng)建BeautifulSoup對象
soup = BeautifulSoup(html_doc, 'html.parser', from_encoding='utf-8')
# 搜索節(jié)點 查找所有標(biāo)簽為a的節(jié)點
soup.find_all('a')
# 查找所有標(biāo)簽為a,連接符合/view/123.html形式的節(jié)點
soup.find_all('a', href='/view/123.html')
soup.find_all('a', href=re.compile(r'/view/\d+\.html'))
# 查找所有標(biāo)簽為div,class為abc,文字為Python的節(jié)點
soup.find_all('div', class_='abc', string='Python')

訪問節(jié)點信息

# 舉例節(jié)點:Python
# 獲取查找到的節(jié)點的標(biāo)簽名稱
node.name
# 獲取查找到的a節(jié)點的href屬性
node['href']
# 獲取查找到的a節(jié)點的鏈接文字
node.get_text()

上面就是bs4在解析模塊的相關(guān)使用,更多方式查看官方文檔即可。

常用的lxml介紹

Xpath是一門在XML文檔中查找信息的語言。Xpath可用來在XML文檔中對元素和屬性進行遍歷。Xpath是W3C XSLT標(biāo)準(zhǔn)的主要元素,并且XQuery和XPointer都構(gòu)建于XPath表達之上。

安裝:

pip install lxml

語法:

選取節(jié)點

XPath 使用路徑表達式在 XML 文檔中選取節(jié)點。節(jié)點是通過沿著路徑或者 step 來選取的。

在使用 xpath之前,先導(dǎo)入 etree類,對原始的 html頁面進行處理獲得一個_Element對象。

Python爬蟲中流程框架和常用模塊是什么

舉個例子:

#導(dǎo)入 etree類
from lxml import etree
# html文本
html = '''
                
                    
                        
                            
                                
                                   好麻煩喲!!!~~~
                                
                            
                        
                    
                             ''' #對 html文本進行處理 獲得一個_Element對象 dom = etree.HTML(html) #獲取 a標(biāo)簽下的文本 a_text = dom.xpath('//div/div/div/div/div/a/text()') print(a_text)

我們通過 etree.HTML( )來生成一個_Element對象,etree.HTML() 會將傳入的文本處理成一個 html文檔節(jié)點。這樣就能保證我們總是能獲得一個包含文檔節(jié)點的_Element對象。

以上是Python爬蟲中流程框架和常用模塊是什么的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文題目:Python爬蟲中流程框架和常用模塊是什么
文章鏈接:http://weahome.cn/article/psjood.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部