導航:首頁 > 編程語言 > python爬取網頁新聞

python爬取網頁新聞

發布時間:2024-01-03 16:54:07

A. python3 怎樣爬取動態載入的網頁信息

方法1

尋找頁面中的xhr請求, 並得到實際的請求參數. 直接獲取相關搜索的請求返回代碼, 然後進行數據整理.

方法2

模擬瀏覽器操作, 比如使用Selenium 模塊.

B. 用Python爬蟲可以爬過去的網站嗎

首先我們要知道什麼是爬蟲?爬蟲就是一個自動抓取網頁數據的程序,是搜索引擎的重要組成部分。通過計算機程序在網路不斷通過定製的入口網址去提取網頁的鏈接,並根據這些鏈接再度抓取提取更深的其它未知的鏈接,以此下去,最終獲取想要的內容。

接下來我們態咐就要思考如何用爬蟲抓取網頁數據:

1.首先要明確網頁的三大特徵:

1)每一個網頁都有唯一統一資源定位符(URL)來進行定位;

2)網頁使用超文本標記語言(HTML)來描述頁面信息;

3)網頁使用超文本傳輸協議(HTTP/HTTPS)協議來傳輸HTML數據。

2.建立爬蟲的設計思路:

1)首先確定需要爬取的網頁URL地址;

2)通過HTTP/HTTP協議來獲取對應的HTML頁面;

3)提取困讓HTML頁面里有用的數據:

a.如果是需要的數據,就保存起來。

b.如果是頁面里的其他URL,那就繼續執行第二步。

比如我們想爬去新浪資訊整站數據內容,觀察到新浪首頁上方有很多分類,例如新聞、財經、科技、體育、娛樂、汽車,每一個分類下又分很多子類,例如新聞下又分汪閉局為軍事、社會、國際。因此,首先要從新浪的首頁開始,找到各個大類的URL鏈接,再在大類下找到小類的URL鏈接,最後找到每個新聞頁面的URL,按需求爬取文本後者圖片,這就是爬取一整個資源站的思路。

3.爬蟲的方式

可以做爬蟲的語言有很多,如PHP、Java、C/C++、Python等等...

但目前Python憑借其語法優美、代碼簡潔、開發效率高、支持的模塊多,相關的HTTP請求模塊和HTML解析模塊非常豐富成為了最廣泛使用的方式,其有強大的爬蟲Scrapy以及成熟高效的scrapy-redis分布式策略。此外,利用python調用其他借口也是非常方便。

C. 如何用Python做爬蟲

1)首先你要明白爬蟲怎樣工作。

想像你是一隻蜘蛛,現在你被放到了互聯「網」上。那麼,你需要把所有的網頁都看一遍。怎麼辦呢?沒問題呀,你就隨便從某個地方開始,比如說人民日報的首頁,這個叫initial pages,用$表示吧。

在人民日報的首頁,你看到那個頁面引向的各種鏈接。於是你很開心地從爬到了「國內新聞」那個頁面。太好了,這樣你就已經爬完了倆頁面(首頁和國內新聞)!暫且不用管爬下來的頁面怎麼處理的,你就想像你把這個頁面完完整整抄成了個html放到了你身上。

突然你發現, 在國內新聞這個頁面上,有一個鏈接鏈回「首頁」。作為一隻聰明的蜘蛛,你肯定知道你不用爬回去的吧,因為你已經看過了啊。所以,你需要用你的腦子,存下你已經看過的頁面地址。這樣,每次看到一個可能需要爬的新鏈接,你就先查查你腦子里是不是已經去過這個頁面地址。如果去過,那就別去了。

好的,理論上如果所有的頁面可以從initial page達到的話,那麼可以證明你一定可以爬完所有的網頁。

那麼在python里怎麼實現呢?
很簡單

import Queue

initial_page = "初始化頁"

url_queue = Queue.Queue()
seen = set()

seen.insert(initial_page)
url_queue.put(initial_page)

while(True): #一直進行直到海枯石爛
if url_queue.size()>0:
current_url = url_queue.get() #拿出隊例中第一個的url
store(current_url) #把這個url代表的網頁存儲好
for next_url in extract_urls(current_url): #提取把這個url里鏈向的url
if next_url not in seen:
seen.put(next_url)
url_queue.put(next_url)
else:
break

寫得已經很偽代碼了。

所有的爬蟲的backbone都在這里,下面分析一下為什麼爬蟲事實上是個非常復雜的東西——搜索引擎公司通常有一整個團隊來維護和開發。

2)效率
如果你直接加工一下上面的代碼直接運行的話,你需要一整年才能爬下整個豆瓣的內容。更別說Google這樣的搜索引擎需要爬下全網的內容了。

問題出在哪呢?需要爬的網頁實在太多太多了,而上面的代碼太慢太慢了。設想全網有N個網站,那麼分析一下判重的復雜度就是N*log(N),因為所有網頁要遍歷一次,而每次判重用set的話需要log(N)的復雜度。OK,OK,我知道python的set實現是hash——不過這樣還是太慢了,至少內存使用效率不高。

通常的判重做法是怎樣呢?Bloom Filter. 簡單講它仍然是一種hash的方法,但是它的特點是,它可以使用固定的內存(不隨url的數量而增長)以O(1)的效率判定url是否已經在set中。可惜天下沒有白吃的午餐,它的唯一問題在於,如果這個url不在set中,BF可以100%確定這個url沒有看過。但是如果這個url在set中,它會告訴你:這個url應該已經出現過,不過我有2%的不確定性。注意這里的不確定性在你分配的內存足夠大的時候,可以變得很小很少。一個簡單的教程:Bloom Filters by Example

注意到這個特點,url如果被看過,那麼可能以小概率重復看一看(沒關系,多看看不會累死)。但是如果沒被看過,一定會被看一下(這個很重要,不然我們就要漏掉一些網頁了!)。 [IMPORTANT: 此段有問題,請暫時略過]

好,現在已經接近處理判重最快的方法了。另外一個瓶頸——你只有一台機器。不管你的帶寬有多大,只要你的機器下載網頁的速度是瓶頸的話,那麼你只有加快這個速度。用一台機子不夠的話——用很多台吧!當然,我們假設每台機子都已經進了最大的效率——使用多線程(python的話,多進程吧)。

3)集群化抓取
爬取豆瓣的時候,我總共用了100多台機器晝夜不停地運行了一個月。想像如果只用一台機子你就得運行100個月了...

那麼,假設你現在有100台機器可以用,怎麼用python實現一個分布式的爬取演算法呢?

我們把這100台中的99台運算能力較小的機器叫作slave,另外一台較大的機器叫作master,那麼回顧上面代碼中的url_queue,如果我們能把這個queue放到這台master機器上,所有的slave都可以通過網路跟master聯通,每當一個slave完成下載一個網頁,就向master請求一個新的網頁來抓取。而每次slave新抓到一個網頁,就把這個網頁上所有的鏈接送到master的queue里去。同樣,bloom filter也放到master上,但是現在master只發送確定沒有被訪問過的url給slave。Bloom Filter放到master的內存里,而被訪問過的url放到運行在master上的Redis里,這樣保證所有操作都是O(1)。(至少平攤是O(1),Redis的訪問效率見:LINSERT – Redis)

考慮如何用python實現:
在各台slave上裝好scrapy,那麼各台機子就變成了一台有抓取能力的slave,在master上裝好Redis和rq用作分布式隊列。

代碼於是寫成

#slave.py

current_url = request_from_master()
to_send = []
for next_url in extract_urls(current_url):
to_send.append(next_url)

store(current_url);
send_to_master(to_send)

#master.py
distributed_queue = DistributedQueue()
bf = BloomFilter()

initial_pages = "www.renmingribao.com"

while(True):
if request == 'GET':
if distributed_queue.size()>0:
send(distributed_queue.get())
else:
break
elif request == 'POST':
bf.put(request.url)

好的,其實你能想到,有人已經給你寫好了你需要的:darkrho/scrapy-redis · GitHub

4)展望及後處理
雖然上面用很多「簡單」,但是真正要實現一個商業規模可用的爬蟲並不是一件容易的事。上面的代碼用來爬一個整體的網站幾乎沒有太大的問題。

但是如果附加上你需要這些後續處理,比如

有效地存儲(資料庫應該怎樣安排)

有效地判重(這里指網頁判重,咱可不想把人民日報和抄襲它的大民日報都爬一遍)

有效地信息抽取(比如怎麼樣抽取出網頁上所有的地址抽取出來,「朝陽區奮進路中華道」),搜索引擎通常不需要存儲所有的信息,比如圖片我存來幹嘛...

及時更新(預測這個網頁多久會更新一次)

如你所想,這里每一個點都可以供很多研究者十數年的研究。雖然如此,
「路漫漫其修遠兮,吾將上下而求索」。

所以,不要問怎麼入門,直接上路就好了:)

D. python可以做到自動抓取互聯網上的新聞更新到網站嗎

理論上完全可以實現,相應的技術方案也是比較成熟的。不知道需要爬取的網站內容復雜不復雜的。目前我想到的方案是藉助爬蟲框架,數據存儲可利用mysql,mongodb之類的。打個比方,這是我用scrapy爬取詩詞網站的數據,臘純然後存儲到Mongodb中,就是缺少一部更新。

我們可以設定一個任務,任務可以是每1分鍾更新一下爬取數據,這樣就可以做到對應網站數據的更新,至於自身網站數據的更新,因為是客戶端發起的,所以,只要做到伺服器商數汪帶據更新了,客戶端就可以看到最新的數據,當然,需要注意相應的緩存技術的影響。

總的來說,爬取網站的數據然後更新到網站,是完全可以實現的。主要是看出於什麼的目的,以及爬輪陵咐取的網站的復雜性問題。

E. Python如何簡單爬取騰訊新聞網前五頁文字內容

可以使用python裡面的一個爬蟲庫,beautifulsoup,這個庫可以很方便的爬取數據。爬蟲首先就得知道網頁的鏈接,然後獲取網頁的源代碼,通過正則表達式或者其他方法來獲取所需要的內容,具體還是要對著網頁源代碼進行操作,查看需要哪些地方的數據,然後通過beautifulsoup來爬取特定html標簽的內容。網上有很多相關的內容,可以看看。

F. 如何利用python爬取網頁內容

利用python爬取網頁內容需要用scrapy(爬蟲框架),但是很簡單,就三步

  1. 定義item類

  2. 開發spider類

  3. 開發pipeline

想學習更深的爬蟲,可以用《瘋狂python講義》

閱讀全文

與python爬取網頁新聞相關的資料

熱點內容
安卓10制空霸權怎麼打開 瀏覽:258
視唱練耳用什麼app好 瀏覽:587
有兩個項目要部署在雲伺服器上 瀏覽:930
信源編解碼器的作用 瀏覽:919
remove命令linux 瀏覽:599
php發送郵件鏈接 瀏覽:34
創維冰箱壓縮機 瀏覽:869
nginxopenssl交叉編譯 瀏覽:750
相機卡無法創建新文件夾 瀏覽:225
單片機照明控制系統程序代碼 瀏覽:10
服務編程一體化 瀏覽:471
tx小霸王伺服器是什麼意思 瀏覽:545
計算機編程工齡工資怎麼算 瀏覽:491
macandroid配置環境變數 瀏覽:854
做項目文件夾的圖標 瀏覽:327
數控車床車軸編程教程 瀏覽:728
怎麼解壓截圖軟體 瀏覽:885
演算法符號橢圓 瀏覽:174
網路螞蟻app是什麼 瀏覽:273
php面向對象編程開發 瀏覽:798