欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python網(wǎng)絡爬蟲實戰(zhàn)

 更新時間:2021年09月20日 11:41:51   作者:愛彈吉他的小盆友  
實踐來源于理論,做爬蟲前肯定要先了解相關的規(guī)則和原理,網(wǎng)絡爬蟲又稱為網(wǎng)頁蜘蛛,網(wǎng)絡機器人,更經(jīng)常的稱為網(wǎng)頁追逐者,是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本。一句話概括就是網(wǎng)上信息搬運工。本篇文章帶你深入了解,需要的朋友可以參考下

一、概述

網(wǎng)絡爬蟲(Web crawler),又稱為網(wǎng)絡蜘蛛(Web spider)或網(wǎng)絡機器人(Web robot),主要用來爬取目標網(wǎng)站內(nèi)容的程序或腳本。

從功能上來區(qū)分網(wǎng)絡爬蟲:

  1. 數(shù)據(jù)采集
  2. 數(shù)據(jù)處理
  3. 數(shù)據(jù)儲存

以上三個部分,基本工作框架流程如下圖:

請?zhí)砑訄D片描述

二、原理

功能:下載網(wǎng)頁數(shù)據(jù),為搜索引擎系統(tǒng)提供數(shù)據(jù)來源。組件:控制器、解析器、資源庫。

Web網(wǎng)絡爬蟲系統(tǒng)首先將種子URL放入下載隊列,然后簡單地從隊首中取出一個URL下載其對應的網(wǎng)頁。得到網(wǎng)頁的內(nèi)容將其儲存后,再經(jīng)過解析網(wǎng)頁中的鏈接信息可以得到一些新的URL,將這些URL加入下載隊列。然后取出一個URL,對其對應的網(wǎng)頁進行下載,再解析,如此反復進行,直到遍歷了整個網(wǎng)絡或滿足某種條件后才會停止下來。

三、爬蟲分類

1、傳統(tǒng)爬蟲

傳統(tǒng)爬蟲從一個或若干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL,在抓取網(wǎng)頁過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統(tǒng)的一定停止條件。

2、聚焦爬蟲

聚焦爬蟲工作流程較為復雜,需要根據(jù)一定的網(wǎng)頁分析算法過濾與主題無關的鏈接,保留有用鏈接并將其放入等待抓取URL隊列。然后它將根據(jù)一定搜索策略從隊列中選擇下一步要抓取的網(wǎng)頁URL,并重復上述過程,直到達到系統(tǒng)某一條件時停止。另外所有被爬蟲抓取的網(wǎng)頁將會被系統(tǒng)存儲,進行一定的分析、過濾,并建立索引,以便之后的查詢和檢索。對于聚焦爬蟲來說,這一過程所得到的分析結(jié)果還可能對以后的抓取過程給出反饋和指導。

3、通用網(wǎng)絡爬蟲(全網(wǎng)爬蟲)

通用網(wǎng)絡爬蟲又稱全網(wǎng)爬蟲, 爬行對象從一些種子URL擴充到整個Web,主要為門戶站點搜索引擎和大型Web服務提供商采集數(shù)據(jù)。這類網(wǎng)絡爬蟲的爬行范圍和數(shù)量巨大,對于爬行速度和存儲空間要求較高,對于爬行頁面順序要求相對較低,同時由于待刷新頁面太多,通常采用并行工作方式,但需要較長時間才能刷新一次頁面。雖然存在一定缺陷, 但通用網(wǎng)絡爬蟲適用于為搜索引擎搜索廣泛的主題,有較強應用價值。

實際的網(wǎng)絡爬蟲系統(tǒng)通常是幾種爬蟲技術相結(jié)合實現(xiàn)的。

四、網(wǎng)頁抓取策略

在爬蟲系統(tǒng)中,待抓取URL隊列是很重要的一部分。隊列中URL以什么樣順序排列也是一個很重要的問題,因為這涉及先抓取哪個頁面,后抓取哪個頁面。

而決定這些URL排列順序的方法,稱之為抓取策略。

1、寬度優(yōu)先搜索:

在抓取過程中,在完成當前層次搜索后,才進行下一層次搜索。

優(yōu)點:算法設計和實現(xiàn)相對簡單。缺點:隨著抓取網(wǎng)頁增多,大量無關網(wǎng)頁將被下載并過濾,算法效率將變低。

2、深度優(yōu)先搜索:

從起始網(wǎng)頁開始,選擇一個URL進入,分析這個網(wǎng)頁中的URL,一個鏈接一個鏈接地抓取下去,直到處理完一條路線之后再處理下一條URL中的路線。

例如,下圖中深度優(yōu)先搜索的遍歷方式時 A 到 B 到 D 到 E 到 F(ABDECF),而寬度優(yōu)先搜索的遍歷方式是 A B C D E F 。

在這里插入圖片描述

3、最佳優(yōu)先搜索:

按照一定的網(wǎng)頁分析法,預測候選URL與目標網(wǎng)頁的相似度,或者與主題的相關性,并選取評價最好的一個或幾個URL進行抓取。

4、反向鏈接數(shù)策略:

反向鏈接數(shù)是指一個網(wǎng)頁被其他網(wǎng)頁鏈接指向的數(shù)量。反向鏈接數(shù)表示的是一個網(wǎng)頁的內(nèi)容受到其他人的推薦程度。

5、Partial PageRank策略:

Partial PageRank算法借鑒了PageRank算法的思想,對于已經(jīng)下載的網(wǎng)頁,連同待抓取URL隊列中的URL,形成網(wǎng)頁集合,計算每個頁面的PageRank值,計算完之后,將待抓取URL隊列中的URL按照PageRank值的大小排列,并按照該順序抓取頁面。

五、網(wǎng)頁抓取的方法

1、分布式爬蟲

用于目前互聯(lián)網(wǎng)中海量URL管理,它包含多個爬蟲(程序),每個爬蟲(程序)需要完成的任務和單個爬行器類似。它們從互聯(lián)網(wǎng)上下載網(wǎng)頁,并把網(wǎng)頁保存在本地的磁盤,從中抽取URL并沿著這些URL的指向繼續(xù)爬行。由于并行爬行器需要分割下載任務,可能爬蟲會將自己抽取的URL發(fā)送給其他爬蟲。

這些爬蟲可能分布在同一個局域網(wǎng)之中,或分散在不同地理位置。

現(xiàn)在比較流行的分布式爬蟲:

Apache Nutch: 依賴hadoop運行,hadoop本身會消耗很多時間。Nutch是為搜索引擎設計的爬蟲,如果不是要做搜索引擎,盡量不要選擇Nutch。

2、Java爬蟲

用Java開發(fā)的抓取網(wǎng)絡資源的小程序,常用的工具包括Crawler4j、WebMagic、WebCollector等。

3、非Java爬蟲

Scrapy: 由Python編寫的,輕量級的、高層次的屏幕抓取框架。最吸引人的地方在于Scrapy是一個框架,任何使用者可以根據(jù)自己的需求進行進行修改,并具有一些高級函數(shù),可以簡化抓取過程。

六、項目實戰(zhàn)

1、抓取指定網(wǎng)頁

抓取某網(wǎng)首頁

使用urllib模塊,此模塊提供了讀取Web頁面數(shù)據(jù)接口,可以像讀取本地文件一樣讀取www和ftp上的數(shù)據(jù)。urllib是一個URL處理包,這個包中集合了一些處理URL的模塊。

urllib.request 模塊: 用來打開和讀取URLs的。urllib.error 模塊: 包含一些由 urllib.request 產(chǎn)生的錯誤,可以用try進行捕捉處理。urllib.parse 模塊: 包含一些解析 URLs的方法。urllib.robotparser: 用來解析 robots.txt 文本文件。它提供了一個單獨的 RobotFileParser 類,通過該類提供的 can_fetch() 方法測試爬蟲是否可以下載一個頁面。

以下代碼為抓取某網(wǎng)頁的代碼:

import urllib.request

url = "https://www.douban.com/"
# 這邊需要模擬瀏覽器才能進行抓取
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'}
request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)
data = response.read()
# 這邊需要轉(zhuǎn)碼才能正常顯示
print(str(data, 'utf-8'))

# 下面代碼可以打印抓取網(wǎng)頁的各類信息
print(type(response))
print(response.geturl())
print(response.info())
print(response.getcode())

2、抓取包含關鍵詞網(wǎng)頁

代碼如下:

import urllib.request

data = {'word': '海賊王'}
url_values = urllib.parse.urlencode(data)
url = "http://www.baidu.com/s?"
full_url = url + url_values
data = urllib.request.urlopen(full_url).read()
print(str(data, 'utf-8'))

3、下載貼吧中圖片

代碼如下:

import re
import urllib.request

# 獲取網(wǎng)頁源代碼
def getHtml(url):
    page = urllib.request.urlopen(url)
    html = page.read()
    return html

# 獲取網(wǎng)頁所有圖片
def getImg(html):
    reg = r'src="([.*\S]*\.jpg)" pic_ext="jpeg"'
    imgre = re.compile(reg)
    imglist = re.findall(imgre, html)
    return imglist


html = getHtml('https://tieba.baidu.com/p/3205263090')
html = html.decode('utf-8')
imgList = getImg(html)
imgName = 0
# 循環(huán)保存圖片
for imgPath in imgList:
    f = open(str(imgName) + ".jpg", 'wb')
    f.write((urllib.request.urlopen(imgPath)).read())
    f.close()
    imgName += 1
    print('正在下載第 %s 張圖片 ' % imgName)
print('該網(wǎng)站圖片已經(jīng)下載完')

4、股票數(shù)據(jù)抓取

代碼如下:

import random
import re
import time
import urllib.request

# 抓取所需內(nèi)容
user_agent = ["Mozilla/5.0 (Windows NT 10.0; WOW64)", 'Mozilla/5.0 (Windows NT 6.3; WOW64)',
              'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
              'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
              'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36',
              'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko)',
              'Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1',
              'Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3',
              'Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12',
              'Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0',
              'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6',
              'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)',
              'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)',
              'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)',
              'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Maxthon/4.0.6.2000 Chrome/26.0.1410.43 Safari/537.1 ',
              'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; QQBrowser/7.3.9825.400)',
              'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0 ',
              'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.92 Safari/537.1 LBBROWSER',
              'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; BIDUBrowser 2.x)',
              'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/3.0 Safari/536.11']

stock_total = []
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'}
for page in range(1, 8):
    url = 'http://quote.stockstar.com/stock/ranklist_a_3_1_' + str(page) + '.html'
    request = urllib.request.Request(url=url, headers={"User-Agent": random.choice(user_agent)})
    response = urllib.request.urlopen(request)
    content = str(response.read(), 'gbk')
    pattern = re.compile('<tbody[\s\S]*</tbody')
    body = re.findall(pattern, str(content))
    pattern = re.compile('>(.*?)<')
    # 正則匹配
    stock_page = re.findall(pattern, body[0])
    stock_total.extend(stock_page)
    time.sleep(random.randrange(1, 4))
# 刪除空白字符
stock_last = stock_total[:]
print(' 代碼', '\t', ' 簡稱', '\t', '最新價', '\t', '漲跌幅', '\t', '漲跌額', '\t', '5分鐘漲幅')

for i in range(0, len(stock_last), 13):
    print(stock_last[i], '\t', stock_last[i + 1], '\t', stock_last[i + 2], '   ', '\t', stock_last[i + 3], '   ', '\t',
          stock_last[i + 4], '\t', stock_last[i + 5])

六、結(jié)語

以上使用Python版本為 3.9。

本篇內(nèi)容參考自《Python3 數(shù)據(jù)分析與機器學習實戰(zhàn)》一書,編寫此篇以學習為主。

寫完就有點懶洋洋的咩~(+ω+)

在這里插入圖片描述

到此這篇關于python網(wǎng)絡爬蟲實戰(zhàn)的文章就介紹到這了,更多相關python 爬蟲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • scrapy頭部修改的方法詳解

    scrapy頭部修改的方法詳解

    這篇文章主要給大家介紹了關于scrapy頭部修改的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Python+wxPython實現(xiàn)個人鏈接收藏夾

    Python+wxPython實現(xiàn)個人鏈接收藏夾

    這篇文章主要介紹了如何使用wxPython和XML數(shù)據(jù)源創(chuàng)建一個具有按鈕和Web視圖的應用程序窗口,以便輕松管理和訪問各種網(wǎng)頁鏈接,感興趣的可以了解下
    2023-08-08
  • python字典操作實例詳解

    python字典操作實例詳解

    這篇文章主要為大家詳細介紹了python字典操作實例的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 使用Python提取PDF表格到Excel文件的操作步驟

    使用Python提取PDF表格到Excel文件的操作步驟

    在對PDF中的表格進行再利用時,除了直接將PDF文檔轉(zhuǎn)換為Excel文件,我們還可以提取PDF文檔中的表格數(shù)據(jù)并寫入Excel工作表,本文將介紹如何使用Python提取PDF文檔中的表格并寫入Excel文件中,需要的朋友可以參考下
    2024-09-09
  • tensorflow之變量初始化(tf.Variable)使用詳解

    tensorflow之變量初始化(tf.Variable)使用詳解

    今天小編就為大家分享一篇tensorflow之變量初始化(tf.Variable)使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python pandas庫中的isnull()詳解

    Python pandas庫中的isnull()詳解

    今天小編就為大家分享一篇Python pandas庫中的isnull()詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python編程中閉包的變量作用域問題解析

    Python編程中閉包的變量作用域問題解析

    這篇文章主要介紹了Python編程中閉包的變量作用域問題解析,在學習Python的返回函數(shù)的時候,我發(fā)現(xiàn)里面涉及了幾個問題,在這里為大家分享講解下
    2021-10-10
  • Python實現(xiàn)操作Redis所有類型的方法詳解

    Python實現(xiàn)操作Redis所有類型的方法詳解

    Redis作為一款高性能的NoSQL數(shù)據(jù)庫,越來越受到了廣大開發(fā)者的喜愛。本篇博客將介紹如何使用Python操作Redis的所有類型,以及一些高級用法,感興趣的可以了解一下
    2023-04-04
  • python密碼學各種加密模塊教程

    python密碼學各種加密模塊教程

    這篇文章主要為大家介紹了python密碼學各種加密模塊教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Python技巧之四種多線程應用分享

    Python技巧之四種多線程應用分享

    這篇文章主要介紹了Python中多線程的所有方式,包括使用threading模塊、使用concurrent.futures模塊、使用multiprocessing模塊以及使用asyncio模塊,希望對大家有所幫助
    2023-05-05

最新評論