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

python通過(guò)鏈接抓取網(wǎng)站詳解

 更新時(shí)間:2019年11月20日 15:10:30   投稿:laozhang  
在本篇文章里小編給大家整理的是關(guān)于python通過(guò)鏈接抓取網(wǎng)站的詳細(xì)方法和知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。

在本篇文章里,你將會(huì)學(xué)習(xí)把這些基本方法融合到一個(gè)更靈活的網(wǎng)站 爬蟲中,該爬蟲可以跟蹤任意遵循特定 URL 模式的鏈接。

這種爬蟲非常適用于從一個(gè)網(wǎng)站抓取所有數(shù)據(jù)的項(xiàng)目,而不適用于從特 定搜索結(jié)果或頁(yè)面列表抓取數(shù)據(jù)的項(xiàng)目。它還非常適用于網(wǎng)站頁(yè)面組織 得很糟糕或者非常分散的情況。

這些類型的爬蟲并不需要像上一節(jié)通過(guò)搜索頁(yè)面進(jìn)行抓取中采用的定位 鏈接的結(jié)構(gòu)化方法,因此在 Website 對(duì)象中不需要包含描述搜索頁(yè)面 的屬性。但是由于爬蟲并不知道待尋找的鏈接的位置,所以你需要一些 規(guī)則來(lái)告訴它選擇哪種頁(yè)面。你可以用 targetPattern(目標(biāo) URL 的 正則表達(dá)式)和布爾變量 absoluteUrl 來(lái)達(dá)成這一目標(biāo):

class Website:  
def __init__(self, name, url, targetPattern, absoluteUrl,    
titleTag, bodyTag):    
self.name = name    
self.url = url    
self.targetPattern = targetPattern    
self.absoluteUrl=absoluteUrl    
self.titleTag = titleTag    
self.bodyTag = bodyTag
class Content:  
def __init__(self, url, title, body):    
self.url = url    
self.title = title    
self.body = body
def print(self):    
print("URL: {}".format(self.url))    
print("TITLE: {}".format(self.title))    
print("BODY:\n{}".format(self.body))

Content 類和第一個(gè)爬蟲例子中使用的是一樣的。

Crawler 類從每個(gè)網(wǎng)站的主頁(yè)開始,定位內(nèi)鏈,并解析在每個(gè)內(nèi)鏈頁(yè)面 發(fā)現(xiàn)的內(nèi)容:

import re
class Crawler:  
def __init__(self, site):    
self.site = site    
self.visited = []
def getPage(self, url):    
try:
req = requests.get(url)    
except requests.exceptions.RequestException:      
return None
return BeautifulSoup(req.text, 'html.parser')
def safeGet(self, pageObj, selector):
selectedElems = pageObj.select(selector)
if selectedElems is not None and len(selectedElems) > 0:
return '\n'.join([elem.get_text() for
elem in selectedElems])
return ''
def parse(self, url):
bs = self.getPage(url)
if bs is not None:
title = self.safeGet(bs, self.site.titleTag)
body = self.safeGet(bs, self.site.bodyTag)
if title != '' and body != '':
content = Content(url, title, body)
content.print()
def crawl(self):
"""
獲取網(wǎng)站主頁(yè)的頁(yè)面鏈接
"""
bs = self.getPage(self.site.url)
targetPages = bs.findAll('a',
href=re.compile(self.site.targetPattern))
for targetPage in targetPages:
targetPage = targetPage.attrs['href']
if targetPage not in self.visited:
self.visited.append(targetPage)
if not self.site.absoluteUrl:
targetPage = '{}{}'.format(self.site.url, targetPage)
self.parse(targetPage)
reuters = Website('Reuters', 'https://www.reuters.com', '^(/article/)', False,
'h1', 'div.StandardArticleBody_body_1gnLA') 
crawler = Crawler(reuters) 
crawler.crawl()

與前面的例子相比,這里的另外一個(gè)變化是:Website 對(duì)象(在這個(gè)例 子中是變量 reuters)是 Crawler 對(duì)象本身的一個(gè)屬性。這樣做的作 用是將已訪問(wèn)過(guò)的頁(yè)面存儲(chǔ)在爬蟲中,但是也意味著必須針對(duì)每個(gè)網(wǎng)站 實(shí)例化一個(gè)新的爬蟲,而不是重用一個(gè)爬蟲去抓取網(wǎng)站列表。

不管你是選擇一個(gè)與網(wǎng)站無(wú)關(guān)的爬蟲,還是將網(wǎng)站作為爬蟲的一個(gè)屬 性,這都是一個(gè)需要根據(jù)自身需求進(jìn)行權(quán)衡的決定。兩種方法在功能實(shí) 現(xiàn)上都是沒有問(wèn)題的。

另外需要注意的是,這個(gè)爬蟲會(huì)從主頁(yè)開始抓取,但是在所有頁(yè)面都被 記錄后,就不會(huì)繼續(xù)抓取了。你可能希望編寫一個(gè)爬蟲,將第 3 章中介 紹的某種模式融合進(jìn)來(lái),然后查看所訪問(wèn)的每個(gè)頁(yè)面中更多的目標(biāo) URL。你甚至還可以跟蹤每個(gè)頁(yè)面中涉及的所有 URL(不僅僅是匹配 目標(biāo)模式的 URL),然后查看這些 URL 是否包含目標(biāo)模式。

以上就是關(guān)于python抓取網(wǎng)站的相關(guān)知識(shí)點(diǎn)內(nèi)容,感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。

相關(guān)文章

  • python修改list中所有元素類型的三種方法

    python修改list中所有元素類型的三種方法

    下面小編就為大家分享一篇python修改list中所有元素類型的三種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • django2.2安裝錯(cuò)誤最全的解決方案(小結(jié))

    django2.2安裝錯(cuò)誤最全的解決方案(小結(jié))

    這篇文章主要介紹了django2.2安裝錯(cuò)誤最全的解決方案(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Python字符串的基本操作方法(非常詳細(xì))

    Python字符串的基本操作方法(非常詳細(xì))

    字符串是python中最常見的數(shù)據(jù)類型,創(chuàng)建字符串只需用引號(hào)括起來(lái)分配給一個(gè)變量即可,這篇文章主要給大家介紹了關(guān)于Python字符串的基本操作方法的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 使用Python畫了一棵圣誕樹的實(shí)例代碼

    使用Python畫了一棵圣誕樹的實(shí)例代碼

    這篇文章主要介紹了使用Python畫了一棵圣誕樹的實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python根據(jù)區(qū)號(hào)生成手機(jī)號(hào)碼的方法

    Python根據(jù)區(qū)號(hào)生成手機(jī)號(hào)碼的方法

    這篇文章主要介紹了Python根據(jù)區(qū)號(hào)生成手機(jī)號(hào)碼的方法,涉及Python隨機(jī)數(shù)與字符串的相關(guān)操作技巧,需要的朋友可以參考下
    2015-07-07
  • Python序列對(duì)象與String類型內(nèi)置方法詳解

    Python序列對(duì)象與String類型內(nèi)置方法詳解

    這篇文章主要介紹了Python序列對(duì)象與String類型內(nèi)置方法,結(jié)合實(shí)例形式分析了Python序列對(duì)象與String類型各種常見內(nèi)置方法相關(guān)使用技巧及操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Python NumPy實(shí)現(xiàn)數(shù)組搜索示例詳解

    Python NumPy實(shí)現(xiàn)數(shù)組搜索示例詳解

    NumPy是一個(gè)開源的Python科學(xué)計(jì)算庫(kù),使用NumPy可以很自然地使用數(shù)組和矩陣,這篇文章主要介紹了使用NumPy實(shí)現(xiàn)數(shù)組搜索,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-05-05
  • Python數(shù)據(jù)分析之真實(shí)IP請(qǐng)求Pandas詳解

    Python數(shù)據(jù)分析之真實(shí)IP請(qǐng)求Pandas詳解

    這篇文章主要給大家介紹了Python數(shù)據(jù)分析之真實(shí)IP請(qǐng)求Pandas,文中通過(guò)示例嗲嗎給大家介紹的很詳細(xì),相信對(duì)大家的學(xué)習(xí)或者理解具有一定的參考借鑒價(jià)值,有需要的朋友們可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • python游戲地圖最短路徑求解

    python游戲地圖最短路徑求解

    這篇文章主要為大家詳細(xì)介紹了python游戲地圖最短路徑的求解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python利用Selenium實(shí)現(xiàn)自動(dòng)觀看學(xué)習(xí)通視頻

    Python利用Selenium實(shí)現(xiàn)自動(dòng)觀看學(xué)習(xí)通視頻

    Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。本文主要介紹了利用Selenium實(shí)現(xiàn)自動(dòng)觀看學(xué)習(xí)通視頻,需要的同學(xué)可以參考一下
    2021-12-12

最新評(píng)論

赤峰市| 枞阳县| 汉中市| 和静县| 高平市| 环江| 卢湾区| 集贤县| 昌乐县| 志丹县| 沙雅县| 娱乐| 阿拉善左旗| 江都市| 含山县| 宝兴县| 东城区| 丽江市| 乐陵市| 屏南县| 天峻县| 盐源县| 会昌县| 阿克苏市| 永泰县| 闵行区| 平顶山市| 沈阳市| 河西区| 呼伦贝尔市| 青铜峡市| 寿宁县| 沈阳市| 新平| 茌平县| 孟村| 桦南县| 华坪县| 稷山县| 高安市| 乐安县|