導航:首頁 > 編程語言 > 網頁正文提取python

網頁正文提取python

發布時間:2023-08-23 06:44:49

❶ 如何用最簡單的python爬蟲採集整個網站

在之前的文章中Python實現「維基網路六度分隔理論「之基礎爬蟲,我們實現了在一個網站上隨機地從一個鏈接到另一個鏈接,但是,如果我們需要系統地把整個網站按目錄分類,或者要搜索網站上的每一個頁面,我們該怎麼辦?我們需要採集整個網站,但是那是一種非常耗費內存資源的過程,尤其是處理大型網站時,比較合適的工具就是用一個資料庫來存儲採集的資源,之前也說過。下面來說一下怎麼做。

網站地圖sitemap
網站地圖,又稱站點地圖,它就是一個頁面,上面放置了網站上需要搜索引擎抓取的所有頁面的鏈接(註:不是所有頁面,一般來說是所有文章鏈接。大多數人在網站上找不到自己所需要的信息時,可能會將網站地圖作為一種補救措施。搜索引擎蜘蛛非常喜歡網站地圖。
對於SEO,網站地圖的好處:
1.為搜索引擎蜘蛛提供可以瀏覽整個網站的鏈接簡單的體現出網站的整體框架出來給搜索引擎看;
2.為搜索引擎蜘蛛提供一些鏈接,指向動態頁面或者採用其他方法比較難以到達的頁面;
3.作為一種潛在的著陸頁面,可以為搜索流量進行優化;
4.如果訪問者試圖訪問網站所在域內並不存在的URL,那麼這個訪問者就會被轉到「無法找到文件」的錯誤頁面,而網站地圖可以作為該頁面的「准」內容。
數據採集
採集網站數據並不難,但是需要爬蟲有足夠的深度。我們創建一個爬蟲,遞歸地遍歷每個網站,只收集那些網站頁面上的數據。一般的比較費時間的網站採集方法從頂級頁面開始(一般是網站主頁),然後搜索頁面上的所有鏈接,形成列表,再去採集到的這些鏈接頁面,繼續採集每個頁面的鏈接形成新的列表,重復執行。
很明顯,這是一個復雜度增長很快的過程。加入每個頁面有10個鏈接,網站上有5個頁面深度,如果採集整個網站,一共得採集的網頁數量是105,即100000個頁面。
因為網站的內鏈有很多都是重復的,所以為了避免重復採集,必須鏈接去重,在Python中,去重最常用的方法就是使用自帶的set集合方法。只有「新」鏈接才會被採集。看一下代碼實例:
from urllib.request import urlopenfrom bs4 import BeautifulSoupimport repages = set()def getLinks(pageurl):globalpageshtml= urlopen("" + pageurl)soup= BeautifulSoup(html)forlink in soup.findAll("a", href=re.compile("^(/wiki/)")):if'href' in link.attrs:iflink.attrs['href'] not in pages:#這是新頁面newPage= link.attrs['href']print(newPage)pages.add(newPage)getLinks(newPage)getLinks("")
原理說明:程序執行時,用函數處理一個空URL,其實就是維基網路的主頁,然後遍歷首頁上每個鏈接,並檢查是否已經在全局變數集合pages裡面,如果不在,就列印並添加到pages集合,然後遞歸處理這個鏈接。
遞歸警告:Python默認的遞歸限制是1000次,因為維基網路的鏈接浩如煙海,所以這個程序達到遞歸限制後就會停止。如果你不想讓它停止,你可以設置一個遞歸計數器或者其他方法。
採集整個網站數據
為了有效使用爬蟲,在用爬蟲的時候我們需要在頁面上做一些事情。我們來創建一個爬蟲來收集頁面標題、正文的第一個段落,以及編輯頁面的鏈接(如果有的話)這些信息。
第一步,我們需要先觀察網站上的頁面,然後制定採集模式,通過F12(一般情況下)審查元素,即可看到頁面組成。
觀察維基網路頁面,包括詞條和非詞條頁面,比如隱私策略之類的頁面,可以得出下面的規則:
所有的標題都是在h1→span標簽里,而且頁面上只有一個h1標簽。
所有的正文文字都在div#bodyContent標簽里,如果我們想獲取第一段文字,可以用div#mw-content-text→p,除了文件頁面,這個規則對所有頁面都適用。
編輯鏈接只出現在詞條頁面上,如果有編輯鏈接,都位於li#ca-edit標簽的li#ca-edit→span→a裡面。
調整一下之前的代碼,我們可以建立一個爬蟲和數據採集的組合程序,代碼如下:
import redef getLinks(pageUrl):global pageshtml = urlopen("" + pageUrl)soup = BeautifulSoup(html)try:print(soup.h1.get_text())print(soup.find(id="mw-content-text").findAll("p")[0])print(soup.find(id="ca-edit").find("span").find("a").attrs['href'])except AttributeError:print("頁面缺少屬性")for link in soup.findAll("a", href =re.compile("^(/wiki/)")):if 'href' in link.attrs:#這是新頁面newPage = link.attrs['href']print("------------------\n"+newPage)
這個for循環和原來的採集程序基本上是一樣的,因為不能確定每一頁上都有所有類型的數據,所以每個列印語句都是按照數據在頁面上出現的可能性從高到低排列的。
數據存儲到MySQL
前面已經獲取了數據,直接列印出來,查看比較麻煩,所以我們就直接存到MySQL裡面吧,這里只存鏈接沒有意義,所以我們就存儲頁面的標題和內容。前面我有兩篇文章已經介紹過如何存儲數據到MySQL,數據表是pages,這里直接給出代碼:
import reimport datetimeimport randomimport pymysqlconn = pymysql.connect(host = '127.0.0.1',port = 3306, user = 'root', passwd = '19930319', db = 'wiki', charset ='utf8mb4')cur = conn.cursor()cur.execute("USE wiki")#隨機數種子random.seed(datetime.datetime.now())#數據存儲def store(title, content):cur.execute("INSERT INTO pages(title, content)VALUES(\"%s\", \"%s\")", (title, content))cur.connection.commit()def getLinks(articleUrl):html = urlopen("" + articleUrl)title = soup.find("h1").get_text()content =soup.find("div",{"id":"mw-content-text"}).find("p").get_text()store(title, content)returnsoup.find("div",{"id":"bodyContent"}).findAll("a",href=re.compile("^(/wiki/)((?!:).)*$"))#設置第一頁links =getLinks("/wiki/Kevin_Bacon")try:while len(links)>0:newArticle = links[random.randint(0, len(links)-1)].attrs['href']print (newArticle)links = getLinks(newArticle)finally:cur.close()conn.close()
小結
今天主要講一下Python中遍歷採集一個網站的鏈接,方便下面的學習。
希望通過上面的操作能幫助大家。如果你有什麼好的意見,建議,或者有不同的看法,我都希望你留言和我們進行交流、討論。

❷ 如何提取正文內容 BeautifulSoup的輸出

創建一個新網站,一開始沒有內容,通常需要抓取其他人的網頁內容,一般的操作步驟如下:

根據url下載網頁內容,針對每個網頁的html結構特徵,利用正則表達式,或者其他的方式,做文本解析,提取出想要的正文。

為每個網頁寫特徵分析這個還是太耗費開發的時間,我的思路是這樣的。

Python的BeautifulSoup包大家都知道吧,

import BeautifulSoupsoup = BeautifulSoup.BeautifulSoup(html)

利用這個包先把html里script,style給清理了:

[script.extract() for script in soup.findAll('script')][style.extract() for style in soup.findAll('style')]

清理完成後,這個包有一個prettify()函數,把代碼格式給搞的標准一些:

soup.prettify()

然後用正則表達式,把所有的HTML標簽全部清理了:

reg1 = re.compile("<[^>]*>")content = reg1.sub('',soup.prettify())

剩下的都是純文本的文件了,通常是一行行的,把空白行給排除了,這樣就會知道總計有多少行,每行的字元數有多少,我用excel搞了一些每行字元數的統計,如下圖:

x坐標為行數,y坐標為該行的字元數

很明顯,會有一個峰值,81~91行就應該是這個網頁的正文部分。我只需要提取81~91行的文字就行了。

問題來了,照著這個思路,有什麼好的演算法能夠通過數據分析的方式統計出長文本的峰值在哪幾行?

BeautifulSoup不僅僅只是可以查找,定位和修改文檔內容,同樣也可以用一個好的 格式進行輸出顯示。BeautifulSoup可以處理不同類型的輸出:

格式化的輸出

非格式化的輸出

格式化輸出

BeautifulSoup中有內置的方法prettfy()來實現格式化輸出。比如:

view plain print ?

frombs4importBeautifulSoup

html_markup=「」」<pclass=」eramid」>

<ulid=」procers」>

<liclass=」procerlist」>

<divclass=」name」>plants</div>

<divclass=」number」>100000</div>

</li>

<liclass=」procerlist」>

<divclass=」name」>algae</div>

OutputinBeautifulSoup

<divclass=」number」>100000</div>

</li>

</ul>」」」

soup=BeautifulSoup(html_markup,「lxml」)

print(soup.prettify())

❸ Python爬取筆趣閣小說返回的網頁內容中沒有小說內容

思路:
一、分析網頁,網址架構
二、碼代碼並測試
三、下載並用手機打開觀察結果
一、分析網頁,網址架構
先隨便點擊首頁上的一篇小說,土豆的--元尊,發現在首頁上面有如下一些信息: 作者,狀態,最新章節,最後更新時間,簡介,以及下面就是每一章的章節名,點擊章節名就可以跳轉到具體的章節。
然後我們按F12,進入開發者模式,在作者上面點擊右鍵--「檢查」,可以發現這些信息都是比較正常地顯示。
再看章節名稱,發現所有的章節都在<div id="list"> 下面的 dd 裡面,整整齊齊地排列好了,看到這種情形,就像點個贊,爬起來舒服。
分析完首頁,點擊章節名稱,跳轉到具體內容,發現所有的正文都在 <div id="content"> 下面,巴適的很
那麼現在思路就是,先進入小說首頁,爬取小說相關信息,然後遍歷章節,獲取章節的鏈接,之後就是進入具體章節,下載小說內容。
OK,開始碼代碼。
二、碼代碼並測試
導入一些基本的模塊:
import requests
from bs4 import BeautifulSoup
import random
2.先構建第一個函數,用於打開網頁鏈接並獲取內容。
使用的是requests 包的request.get ,獲取內容之後用『utf-8』 進行轉碼。
這里我之前有個誤區就是,以為所有的網站都是用 'utf-8' 進行轉碼的,但是實際上有些是用'gbk' 轉碼的,如果隨便寫,就會報錯。
網路之後,只要在console 下面輸入 『document.charset』 就可以獲取網站的編碼方式。

❹ 如何使用爬蟲做一個網站

做法:傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。聚焦爬蟲的工作流程較為復雜,需要根據一定的網頁分析演算法過濾與主題無關的鏈接,保留有用的鏈接並將其放入等待抓取的URL隊列。

然後,它將根據一定的搜索策略從隊列中選擇下一步要抓取的網頁URL,並重復上述過程,直到達到系統的某一條件時停止。另外,所有被爬蟲抓取的網頁將會被系統存貯,進行一定的分析、過濾,並建立索引,以便之後的查詢和檢索;對於聚焦爬蟲來說,這一過程所得到的分析結果還可能對以後的抓取過程給出反饋和指導。

❺ 教你用Python寫一個爬蟲,免費看小說

這是一個練習作品。用python腳本爬取筆趣閣上面的免費小說。

環境:python3
類庫:BeautifulSoup
數據源: http://www.biqukan.cc

原理就是偽裝正常http請求,正常訪問網頁。然後通過bs4重新解析html結構來提取有效數據。

包含了偽裝請求頭部,數據源配置(如果不考慮擴展其他數據源,可以寫死彎螞)。纖鬧伏

config.py文件

fiction.py文件

summary.py文件

catalog.py文件

article.py文件

暫沒有做數據保存模塊。如果需要串起來做成一個完整的項目的話,只需要把小說數據結構保存即可(節省磁碟空間)。通過小說url可以很快速的提取出小說簡介、目錄、每一章的毀攜正文。

如果想要做的更好,可以把目錄,介紹、正文等部分緩存起來,當然得有足夠的空間。

❻ 如何用Python爬取數據

方法/步驟

閱讀全文

與網頁正文提取python相關的資料

熱點內容
兩台伺服器如何同步內容 瀏覽:808
伺服器共用一個ip有什麼壞處 瀏覽:461
go加密exe 瀏覽:606
pdf改分欄 瀏覽:123
python執行怎麼寫 瀏覽:766
遇見她app怎麼加好友 瀏覽:548
手機怎麼設置app強制提醒 瀏覽:77
怎樣不用海綿做解壓玩具 瀏覽:81
為什麼遠程伺服器復制不了文件 瀏覽:715
打開app閃退怎麼回事 瀏覽:752
bcrpt加密原理 瀏覽:401
女程序員寫的小說 瀏覽:774
華為路由器ip設置命令 瀏覽:552
如何打開軟體伺服器 瀏覽:756
單片機介面技術及應用 瀏覽:751
linux下執行腳本文件 瀏覽:127
撥號加密保護 瀏覽:435
b站彈幕加密 瀏覽:601
交友盲盒源碼破解 瀏覽:248
單片機100位百位符號 瀏覽:686