Python爬取散文網散文

2021-08-20 11:55:18 字數 4378 閱讀 1209

配置python 2.7

bs4

requests

安裝 用pip進行安裝 sudo pip install bs4

sudo pip install requests

簡要說明一下bs4的使用因為是爬取網頁 所以就介紹find 跟find_all

find跟find_all的不同在於返回的東西不同 find返回的是匹配到的第乙個標籤及標籤裡的內容

find_all返回的是乙個列表

比如我們寫乙個test.html 用來測試find跟find_all的區別。內容是:

abcthree a

three a

three a

fourfour p

four p

four p

a ```

然後test.py的**為:

from bs4 import beautifulsoup

import lxml

ifname=='main':

s = beautifulsoup(open('test.html'),'lxml')

print s.prettify()

print "------------------------------"

print s.find('div')

print s.find_all('div')

print "------------------------------"

print s.find('div',id='one')

print s.find_all('div',id='one')

print "------------------------------"

print s.find('div',id="two")

print s.find_all('div',id="two")

print "------------------------------"

print s.find('div',id="three")

print s.find_all('div',id="three")

print "------------------------------"

print s.find('div',id="four")

print s.find_all('div',id="four")

print "------------------------------"

執行以後我們可以看到結果當獲取指定標籤時候兩者區別不大當獲取一組標籤的時候兩者的區別就會顯示出來

![image.png](

所以我們在使用時候要注意到底要的是什麼,否則會出現報錯

接下來就是通過requests 獲取網頁資訊了,我不太懂別人為什麼要寫heard跟其他的東西

我直接進行網頁訪問,通過get方式獲取散文網幾個分類的二級網頁然後通過乙個組的測試,把所有的網頁爬取一遍

def get_html():

url = ""

two_html = ['sanwen','shige','zawen','suibi','rizhi','novel']

for doc in two_html:

i=1if doc=='sanwen':

print "running sanwen -----------------------------"

if doc=='shige':

print "running shige ------------------------------"

if doc=='zawen':

print 'running zawen -------------------------------'

if doc=='suibi':

print 'running suibi -------------------------------'

if doc=='rizhi':

print 'running ruzhi -------------------------------'

if doc=='nove':

print 'running xiaoxiaoshuo -------------------------'

while(i<10):

par =

res = requests.get(url+doc+'/',params=par)

if res.status_code==200:

soup(res.text)

i+=i

這部分的**中我沒有對res.status_code不是200的進行處理,導致的問題是會不顯示錯誤,爬取的內容會有丟失。然後分析散文網的網頁,發現是www.sanwen.net/rizhi/&p=1

p最大值是10這個不太懂,上次爬盤多多是100頁,算了算了以後再分析。然後就通過get方法獲取每頁的內容。

獲取每頁內容以後就是分析作者跟題目了**是這樣的

def soup(html_text):

s = beautifulsoup(html_text,'lxml')

link = s.find('div',class_='categorylist').find_all('li')

for i in link:

if i!=s.find('li',class_='page'):

title = i.find_all('a')[1]

author = i.find_all('a')[2].text

url = title.attrs['href']

sign = re.compile(r'(//)|/')

match = sign.search(title.text)

file_name = title.text

if match:

file_name = sign.sub('a',str(title.text))

獲取標題的時候出現坑爹的事,請問大佬們寫散文你標題加斜槓幹嘛,不光加乙個還有加兩個的,這個問題直接導致我後面寫入檔案的時候檔名出現錯誤,於是寫正規表示式,我給你改行了吧。
def get_content(url):

res = requests.get(''+url)

if res.status_code==200:

soup = beautifulsoup(res.text,'lxml')

contents = soup.find('div',class_='content').find_all('p')

content = ''

for i in contents:

content+=i.text+'\n'

return content

最後就是寫入檔案儲存ok
f = open(file_name+'.txt','w')

print 'running w txt'+file_name+'.txt'

f.write(title.text+'\n')

f.write(author+'\n')

content=get_content(url)

f.write(content)

f.close()

三個函式獲取散文網的散文,不過有問題,問題在於不知道為什麼有些散文丟失了我只能獲取到大概400多篇文章,這跟散文網的文章是差很多很多的,但是確實是一頁一頁的獲取來的,這個問題希望大佬幫忙看看。可能應該做網頁無法訪問的處理,當然我覺得跟我宿舍這個破網有關係
f = open(file_name+'.txt','w')

print 'running w txt'+file_name+'.txt'

f.write(title.text+'\n')

f.write(author+'\n')

content=get_content(url)

f.write(content)

f.close()

```

差點忘了效果圖

能會出現timeout現象吧,只能說上大學一定要選網好的啊!

每天進步一點點,希望壞狗狗能離我遠一點。。。。。

python爬取奇趣網小說

在爬蟲爬取的過程中,需要判斷傳入的鏈結對應的是靜態網頁還是動態網頁,然後選擇不同的 對其進行爬取 因為靜態爬取比較快,所以當網頁為靜態網頁時就不需要呼叫動態爬取的 了,from bs4 import beautifulsoup,unicodedammit from urllib.request im...

無路而處處是路 簡媜散文《春風送網》

編者按 簡媜的文字清新脫俗,筆觸細膩,洗盡鉛華,如出水芙蓉一般。在她 筆下,路 是行路,更是心路。行到水窮處,坐看雲起時,發現 無路而處處是路 才能獲得 真正的自由。萬頃波中或莽莽叢林,埋藏在路中的自由是等量的。春風宅心仁厚,給樵夫送涼,給釣叟送網 不同的是,有人行路遲遲,以為離家愈遠 有人衷心歡喜...

校花網爬取

聯絡爬蟲使用 1 堆糖校花網api 獲取資料的api 路徑 path 2 簡要介紹爬蟲 2 從解析過程來說 方式2 模擬瀏覽器傳送請求 獲取網頁 提取有用的資料 存放於資料庫或檔案中 爬蟲要做的就是方式2 爬蟲過程圖 3 過程各個階段的主要介紹 1 發起請求 使用http庫向目標站點發起請求,即傳送...