最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python高階爬蟲實戰(zhàn)分析

 更新時間:2018年07月29日 11:30:53   作者:芙蘭Flan  
這篇文章給大家分享了python高階爬蟲實戰(zhàn)的相關(guān)實例內(nèi)容以及技巧分析,有興趣的朋友參考下。

關(guān)于這篇文章有幾句話想說,首先給大家道歉,之前學的時候真的覺得下述的是比較厲害的東西,但是后來發(fā)現(xiàn)真的是基礎(chǔ)中的基礎(chǔ),內(nèi)容還不是很完全。再看一遍自己寫的這篇文章,突然有種想自殺的沖動。emmm所以樓主決定本文全文抹掉重寫一遍,并且為之前點進來看的七十多訪問量的人,致以最誠摯的歉意。好想死。。

在學完了爬蟲全部內(nèi)容后,樓主覺得勉強有資格為接觸爬蟲的新人指指路了。那么廢話不多說,以下正文:

一、獲取內(nèi)容

說爬蟲一定要先說爬取內(nèi)容的方法,python有這么幾個支持爬蟲的庫,一個是urllib和它的后續(xù)版本庫,這個庫做爬取的時候生成的中繼對象是比較多的,樓主也記不大住都有什么,而且這個庫的使用在樓主看來有些過時了。更加建議做爬取的時候使用requests庫(ps:不是request)

使用urllib:

html = urllib.request.urlopen(url).read()

使用requests:

r = requests.get(url)

對于獲取到的內(nèi)容,有以下方法進行處理:
1、使用正則表達式匹配。

2、使用BeautifulSoup對爬取內(nèi)容標簽對象化。

3、通過構(gòu)造節(jié)點樹使用Xpath獲取元素。

第一種方法勝在直接,效率高而且不需要安裝三方庫。第二種方法勝在簡單,標簽對象化后不需要寫復雜的正則表達式,而且提取標簽更加方便。第三種方法勝在靈活,獲取內(nèi)容更加靈活,就是語法有點多,不熟的話可以對著Xpath語法文檔寫。

使用正則表達式匹配:

pattern_content = '<div class="rich_media_content " id="js_content">(.*?)</div>'
content1 = re.findall(pattern_content, html, re.S)

使用BeautifulSoup對爬取內(nèi)容標簽對象化:

soup = bs4.BeautifulSoup(html, 'lxml')
imgs = soup.find_all('img')

關(guān)于BeautifulSoup的安裝請自行百度,沒記錯的話直接pip是可行的。

通過構(gòu)造節(jié)點樹使用Xpath獲取元素:

selector=etree.HTML(html)
content=selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()')

至此,爬取的基本內(nèi)容就敘述完畢了,這里給出的是最簡單的范例,如果想深入了解某種方法,建議去查詢更詳細的技術(shù)文檔。

下面內(nèi)容就是之前的了,略作刪改。

二、偽造表單請求頭

很多網(wǎng)站上的數(shù)據(jù)爬取比較簡單,只需要直接request那個網(wǎng)址就可以,很多小型網(wǎng)站都是這樣。面對這樣的網(wǎng)站數(shù)據(jù),只需要花個幾分鐘隨便寫幾行代碼,就能爬到我們想要的數(shù)據(jù)。

但是想要爬取稍微大型一些的網(wǎng)站數(shù)據(jù),就不會這么容易了。這些網(wǎng)站的服務(wù)器,會分析收到的每一條request,來判斷該請求是否為用戶操作。這種技術(shù),我們把它稱為反爬技術(shù)。常見的反爬技術(shù),樓主知道的有上面所述的分析請求,還有驗證碼技術(shù)。對于這兩種情況,我們在構(gòu)造爬蟲程序的時候就需要稍微費點力氣了。

先來介紹第一種的應(yīng)對方法。首先我們要知道一條request的組成部分,不同網(wǎng)站的request格式可能會有點不同。對于這一點,我們可以通過瀏覽器的開發(fā)者工具,抓到一個網(wǎng)站的請求數(shù)據(jù)格式。如下圖:

11111

此為使用谷歌瀏覽器抓取的請求信息。

我們可以看到request headers的格式,所以在訪問這樣的網(wǎng)站的時候,我們就不能忘了在postdata中放上一條偽造的headers。

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0',
			  'Referer': 'Address'}

其中referer鍵對應(yīng)的值是要訪問的網(wǎng)址。

某些網(wǎng)站還會需要有cookie的用戶驗證,我們可以通過調(diào)用

requests.Session().cookies

來獲得它。

如果在爬蟲中需要提交某些信息的話,還要構(gòu)造一下postdata的數(shù)據(jù)。比如這樣:

postData = {
		'username': ul[i][0],
		'password': ul[i][1],
		'lt': b.group(1),
		'execution': 'e1s1',
		'_eventId': 'submit',
		'submit': '%B5%C7%C2%BC',
	}

三、關(guān)于多網(wǎng)頁的爬取

如果網(wǎng)頁地址有規(guī)律,那么構(gòu)造url用個循環(huán)函數(shù)就好,對于網(wǎng)頁地址中包含隨機碼的時候,通常就是先爬取根頁面,獲取到所有想爬取的子頁面url,把這些url放進一個url池(項目小是一維的列表,項目大的時候可能會是高維的列表)里,循環(huán)爬取。

而比較高效的方式是使用多線程技術(shù),demo有點長只貼關(guān)鍵部分。

class Geturl(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)
  def run(self):
    res = requests.get(url, headers=header)
    html = res.text
    # print(html)
    pattern_href = '<a target="_blank" href="(.*?)" rel="external nofollow" id'
    href = re.findall(pattern_href, html, re.S)
    for href in href:
      href = href.replace('amp;', '')
      a.put(href)
      a.task_done()
class Spider(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)
  def run(self):
    href = a.get()
    res = requests.get(href, headers=header2)
    html = res.text
    pattern_title = '<title>(.*?)</title>'
    title = re.findall(pattern_title, html, re.S)
    pattern_content = '<div class="rich_media_content " id="js_content">(.*?)</div>'
    content1 = re.findall(pattern_content, html, re.S)
    print(title)
    # time.sleep(1.5)
    pattern_content2 = '>(.*?)<'
    content2 = re.findall(pattern_content2, content1[0], re.S)
    while '' in content2:
      content2.remove('')
    content = ''
    for i in content2:
      content = content + i
    content = content.replace('&nbsp;','')
    print(content)

開兩個線程,一個爬取url放進url池,一個從url池里獲取url然后爬取內(nèi)容,再開一個線程監(jiān)控兩個線程,如果兩個線程運行完畢,結(jié)束主線程。

python的多線程機制底層做的其實不好,理由不多講。另,多線程具體操作很多就不展開講了。

四、關(guān)于使用代理ip

很多網(wǎng)站會有ip檢測機制,當同一ip以人力無法做到的速度多次訪問網(wǎng)站時,通常就會觸發(fā)這種機制。

代理ip的話,通常通過爬取一些開源ip網(wǎng)站發(fā)布的ip構(gòu)建ip代理池,比如西刺、蘑菇等。這樣的一些網(wǎng)站,直接百度代理ip就能找到。然后,使用Flask+Redis維護代理池。這部分詳細說明也比較長,就不細說了。也不是爬蟲必要的東西。另,自己有服務(wù)器的也可以使用SSR的翻墻工具,不過搭建不是樓主親手做的,所以就不詳細說明了。

五、關(guān)于selenium模仿瀏覽器操作

關(guān)于selenium主要介紹以下幾點:

1、selenium 是一套完整的web應(yīng)用程序測試系統(tǒng),包含了測試的錄制(selenium IDE),編寫及運行(Selenium Remote Control)和測試的并行處理(Selenium Grid)。

2、Selenium的核心Selenium Core基于JsUnit,完全由JavaScript編寫,因此可以用于任何支持JavaScript的瀏覽器上。

3、selenium可以模擬真實瀏覽器,自動化測試工具,支持多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題。

4、用python寫爬蟲的時候,主要用的是selenium的Webdriver。

這些是某說明文檔的內(nèi)容,能看懂就看,看不懂就看樓主的簡單版:

selenium的話主要用于模仿瀏覽器操作,比如向文本框中賦值,點擊按鈕等。配合高效率瀏覽器的話也是實現(xiàn)爬蟲的一個比較好的方法。優(yōu)點是通過模擬瀏覽器操作,不易被反爬檢測。缺點是效率低下,非常不適合大型爬蟲,小作坊自己玩玩就好。

六、關(guān)于Scrapy框架

這又是一塊非常非常龐大的內(nèi)容,很多技術(shù)一旦牽扯上框架就麻煩了。當然學會了的話,做大型項目就簡單多了。重點就是框架一般針對比較大型的系統(tǒng)去做,所以其管理和操作會比較麻煩,內(nèi)部的一些機制也不是很好說明。這一塊的話如果以后有時間就單獨寫一篇文章詳細介紹,畢竟從原理到搭建到配置到使用,內(nèi)容太多。。

七、關(guān)于驗證碼處理

對于處理驗證碼的話,目前簡單點的是直接使用PIL(pillow)做圖像處理,然后使用Tesseract直接識別。此方法樓主已經(jīng)寫好了單獨的文章供大家參考。

另,如果學過機器學習神經(jīng)網(wǎng)絡(luò)這部分的話,還可以使用卷積神經(jīng)網(wǎng)絡(luò)。這個方向樓主還正在學,簡單給大家指條路,不詳述。

以上是樓主想到的爬蟲所有內(nèi)容,若有錯誤還望指正。

相關(guān)文章

  • python 生成器需注意的小問題

    python 生成器需注意的小問題

    這篇文章主要介紹了python 生成器需注意的小問題,幫助大家更好的理解和學習python 生成器,感興趣的朋友可以了解下
    2020-09-09
  • python實現(xiàn)圖像拼接

    python實現(xiàn)圖像拼接

    這篇文章主要為大家詳細介紹了python實現(xiàn)圖像拼接,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 表格梳理python內(nèi)置數(shù)學模塊math分析詳解

    表格梳理python內(nèi)置數(shù)學模塊math分析詳解

    這篇文章主要為大家介紹了python內(nèi)置數(shù)學模塊math的分析詳解,文中通過表格梳理的方式以便讓大家在學習過程中一目望去清晰明了,有需要的朋友可以借鑒參考下
    2021-10-10
  • Python遠程控制Windows服務(wù)器的方法詳解

    Python遠程控制Windows服務(wù)器的方法詳解

    在很多企業(yè)會使用閑置的 Windows 機器作為臨時服務(wù)器,有時候我們想遠程調(diào)用里面的程序或查看日志文件。本文分享了利用Python遠程控制Windows服務(wù)器的方法,感興趣的可以學習一下
    2022-05-05
  • Python中BeautifulSoup模塊詳解

    Python中BeautifulSoup模塊詳解

    大家好,本篇文章主要講的是Python中BeautifulSoup模塊詳解,感興趣的同學趕緊來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 使用matlab或python將txt文件轉(zhuǎn)為excel表格

    使用matlab或python將txt文件轉(zhuǎn)為excel表格

    這篇文章主要介紹了matlab或python代碼將txt文件轉(zhuǎn)為excel表格,本文通過matlab代碼和python 代碼給大家詳細介紹,需要的朋友可以參考下
    2019-11-11
  • python區(qū)塊鏈創(chuàng)建多個交易教程

    python區(qū)塊鏈創(chuàng)建多個交易教程

    這篇文章主要為大家介紹了python區(qū)塊鏈創(chuàng)建多個交易的實現(xiàn)示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 基于Python編寫簡單實用的日志裝飾器

    基于Python編寫簡單實用的日志裝飾器

    在寫代碼的時候,往往會漏掉日志這個關(guān)鍵因素,導致功能在使用的時候出錯卻無法溯源。這個時候只要利用日志裝飾器就能解決,本文將用Python自制一個簡單實用的日志裝飾器,需要的可以參考一下
    2022-05-05
  • python 實現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url

    python 實現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url

    今天小編就為大家分享一篇python 實現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python中的八大核心語句你知道幾個呢?

    Python中的八大核心語句你知道幾個呢?

    Python?是一種代表簡單思想的語言,其語法相對簡單,很容易上手。本文精心篩選了Python中的八大核心語句,快來看看你都掌握了幾個呢
    2023-02-02

最新評論

重庆市| 丹棱县| 饶阳县| 台东市| 大竹县| 凤庆县| 新绛县| 江门市| 财经| 松溪县| 塔河县| 孟连| 凤阳县| 抚宁县| 全州县| 获嘉县| 东台市| 潞西市| 苏尼特右旗| 沾益县| 博客| 商河县| 潼南县| 额济纳旗| 从化市| 甘洛县| 娄烦县| 凤城市| 灌南县| 屏边| 彭泽县| 长汀县| 南平市| 宿松县| 凌源市| 体育| 建阳市| 综艺| 清镇市| 尤溪县| 静乐县|