python小試牛刀之爬取網頁文字內容儲存到本地

2021-08-13 15:37:15 字數 3632 閱讀 4361

看完了《簡明python教程》這本書,頓覺手癢,欲磨刀大幹一番。

剛好今天看到乙個人**上的資料挺不錯的,想要儲存下來。可是文章又特別得多,要是我一次一次的去複製貼上,這還不得累死人。於是乎就想放棄。但突然靈光一閃,之前一直聽說python寫爬蟲什麼的,便自己也一直想嘗試著用python寫一次,這不是正是乙個好機會使用爬蟲將文字爬下來的時候嗎?(按照程式設計師的邏輯,哈哈)

於是便有了以下的工作。

因為我想爬的是一篇寫作素材**的內容,所以以下以這個**為例:

url="";

htmlr=requests.get(url);

class="title">

class="l">

href=""

title="【江湖寶典】一些江湖術語及常見的名詞解析"

target="_blank"

style="color:#e36c09">【江湖寶典】一些江湖術語及常見的名詞解析a>

頂span>

薦span>

div>

class="r">該寫作素材對 11906span> 個作者有用div>

div>

class="intro">十二經脈指人身手足三陰三陽十二經,包括手陽明、手少陽、手太陽、手太陰、手厥陰、手少陰、足陽明、足少陽、足太陽、足陰、足厥陰、足少陰共十二經脈。十二經脈執行於一身內外,遍布各處,不論是四肢、軀幹、內臟無所…div>

class="tagstime">

class="r">2013.06.08入庫div>

div>

li>

在****中有這樣的**塊,我們需要從中分割出二級**()和title內容。

然後使用beautifulsoup分離出每乙個以上的單獨的**塊:

bsobjhtml=beautifulsoup(htmlr.text);
for titlelist in bsobjhtml.findall("div",):
urltext=titlelist.a["href"];

filename=titlelist.a["title"];

rtext=requests.get(urltext);

bsobjtext=beautifulsoup(rtext.text);

filetext=bsobjtext.find("div",);

接著就是開啟本地檔案,然後儲存內容了:

fp=open(filepath+filename+".txt","w");

fp.write(tool.replace(filetext.__str__()));

當然還有一部重要的內容,也就是tool。因為網頁**會有很多標籤如,所以儲存之前要刪除掉這些標籤,於是就有了tool:

class tool:

removeimg = re.compile('| |')

removeaddr = re.compile('|

') replaceline = re.compile('|||')

replacetd= re.compile('')

replacepara = re.compile('')

replacebr = re.compile('|')

removeextratag = re.compile('<.*?>')

def replace(self,x):

x = re.sub(self.removeimg,"",x)

x = re.sub(self.removeaddr,"",x)

x = re.sub(self.replaceline,"\n",x)

x = re.sub(self.replacetd,"\t",x)

x = re.sub(self.replacepara,"\n ",x)

x = re.sub(self.replacebr,"\n",x)

x = re.sub(self.removeextratag,"",x)

return x.strip()

下面放上全部**:

"""

created on 2017/12/15

@author: manbu

"""# coding:utf-8

import re

import requests

from bs4 import beautifulsoup

filepath="f:/temp_xiaoshuo/";

class

tool:

removeimg = re.compile('| |')

removeaddr = re.compile('|')

replaceline = re.compile('|||')

replacetd= re.compile('')

replacepara = re.compile('')

replacebr = re.compile('|')

removeextratag = re.compile('<.*?>')

defreplace

(self,x):

x = re.sub(self.removeimg,"",x)

x = re.sub(self.removeaddr,"",x)

x = re.sub(self.replaceline,"\n",x)

x = re.sub(self.replacetd,"\t",x)

x = re.sub(self.replacepara,"\n ",x)

x = re.sub(self.replacebr,"\n",x)

x = re.sub(self.removeextratag,"",x)

return x.strip()

tool=tool()

url="";

htmlr=requests.get(url);

bsobjhtml=beautifulsoup(htmlr.text);

for titlelist in bsobjhtml.findall("div",):

if (titlelist.a != none):

urltext=titlelist.a["href"];

filename=titlelist.a["title"];

fp=open(filepath+filename+".txt","w");

rtext=requests.get(urltext);

bsobjtext=beautifulsoup(rtext.text);

filetext=bsobjtext.find("div",);

fp.write(tool.replace(filetext.__str__()));

fp.close();

總算大功告成,由於第一次接錯python,還有許多不完美的地方,哈哈,不過可以自動化儲存文件的內容是實現了。欣喜。依稀想起一位大神說過的話:懶惰是人類進步的源泉。

小試牛刀之webpack dev server

模組熱替換 用express搭建過乙個小型的伺服器,用過監聽模式來解決手動npm run build的麻煩,這次使用webpack dev server來搭建乙個伺服器,且一併解決 手動編譯 手動重新整理瀏覽器 的麻煩。目錄 詳細 root div body html import from mat...

python 演算法 小試牛刀

1.列印從1到100,碰到3倍數用fizz代替,碰到5倍數,用buzz代替,3和5的倍數,fizzbuzz代替 def func for i in range 1,101 if i 3 0 i 5 0 print fizzbuzz elif i 3 0 print fizz elif i 5 0 p...

Python小試牛刀 迴圈

斐波那契數列,數列前兩項為1,之後每一項都是前兩項之和。usr bin env python3 a,b 0,1 while b 100 print b a,b b,a b預設print輸出結果後會自動換行,如果不希望換行,只做間隔的話,就通過另乙個引數end來替換這個換行符 print a,end ...