爬取網易新聞

2022-07-05 02:15:09 字數 2377 閱讀 7327

爬取網易新聞

在本小節的內容中呢,筆者將會給大家講述如何去過濾我們所不需要的內容。下面的例子,是本人在爬取網易新聞時,遇到的乙個小問題,在定位元素之後,進行列印的時候,出現了部分內容無法正常解析。筆者也是進行了很長時間的嘗試,請教了很多人,才得到的三種方法。我們一起來看。

通過寫入檔案的方法過濾元素

import requests

import  re

from bs4 import beautifulsoup as bs

response = bs(requests.get('').text,'html.parser')

#print(response.h2.string)

#定位到含有('a',)的元素,並輸出裡面的text元素

#通過find_all方法遍歷(('div',)的內容,通過for迴圈,列印出div中所有的內容

for style in response.find_all('div',):

# 通過for迴圈寫入style中的text內容到f檔案

with open("aa.txt",'a') as f:

f.write(style.get_text())

#通過for迴圈,寫入到檔案aa.txt,將f中的所有的iframe過濾

with open('aa.txt','r') as f:

for i in f :

if 'iframe' in i:

pass

else:

print(i)

好的,**如上。我們接下來解讀一下這段**

首先,我們匯入了requests庫和bs4的方法,然後通過bs4的方法,解析了我們爬取到的網易新聞的內容

然後,就可以開始使用bs4中的方法,進行列印我們想要獲得的內容了。

最後,通過find_all的方法,遍歷了符合('div',)的標籤下的所有內容,通過for迴圈去迴圈寫入到aa.txt的檔案,再加入乙個for迴圈與乙個if的判斷,遍歷aa.txt的檔案,然後過濾掉檔案中所有帶有iframe的內容。

這裡是,是由於,我之前寫的時候,定位到了正文內容,但是輸出的時候,總是無法輸出所有的正文,想到的取代的方法。那麼接下來會有另外兩種方法,也來介紹給大家。

通過正規表示式過濾元素

在上面那段**中,由於本人學藝不精,最初只能通過那種方法,進行過濾,下面我們來看看如何使用正規表示式,去過濾掉我們不需要的內容。

#通過正規表示式,過濾屌所有的不符合條件的html的標籤,使用re.sub,進行替換,然後列印出過濾完成的內容

#response = response = bs(requests.get('').text

#clear = re.compile('<\s*script[^>]*>[^<]*<\s*/\s*script\s*>',re.i)

#content = clear.sub("",response)

#soup = bs(content,'html.parser')

#content = soup.find('div',)

#print(content.text.strip())

當然,這部分的難點就在於如何去編寫這個正規表示式。筆者其實最初是有考慮過使用正則去實現過濾的,但是也是苦於不會編寫,無奈只能放棄。正則的話,各位也只能多練了。

使用lxml解析庫進行解析

經過多次的嘗試,筆者終於發現了問題所在,原來是解析庫使用錯誤導致了解析的時候出現了一些小問題。不過沒關係,我們也掌握了另外兩個方法。下面這段**就是我們使用lxml的解析庫的的方法。

#使用lxml解析庫,對爬到的頁面進行解碼

#response = bs(requests.get('').text,'lxml')

#soup = response.find('div',).find_all('p')

#for i in soup:

#    print(i.text)

ok,執行上述**之後,我們會發現,輸出的結果和使用正則過濾的是一樣的。那麼,為什麼會這樣呢?

我們都知道,beautiful soup包含了並不止一種的解析庫,而筆者之前使用的是html的解析庫,也就導致了,之前出現了部分script無法解析,過濾的情況。至於原因,目前筆者也是無法解釋清楚。不過呢,我們不要糾結於此。這次只是乙個小小的教訓,也希望大家記住,當我們在使用乙個庫無法達到想要的效果的時候,不妨嘗試另乙個庫,也許會有驚喜哦。

上面的三種方法,都可以得到我們想要的結果。

在這裡呢,只是想告訴大家,大道萬千,殊途同歸。實現的方法,有很多種;而我們,並不需要大家全部掌握,只需要能夠使用適合自己的就好。

python爬取網易科技新聞

coding utf 8 import requests from lxml import etree headers 根據url獲取剛網頁中的新聞詳情頁的 列表 def getnewsdetailurllist url param url 每頁的url return newdetaillist 每...

Python 爬蟲例項(4) 爬取網易新聞

自己閒來無聊,就爬取了網易資訊,重點是分析網頁,使用抓包工具詳細的分析網頁的每個鏈結,資料儲存在sqllite中,這裡只是簡單的解析了新聞頁面的文字資訊,並未對資訊進行解析 僅供參考,不足之處請指正 coding utf 8 import random,re import sqlite3 impor...

網路爬蟲(四) 使用Scrapy爬取網易新聞

import scrapy class newsitem scrapy.item news thread scrapy.field news title scrapy.field news url scrapy.field news time scrapy.field news source scr...