近期做一個項目需要用到python,只懂皮毛的我花了三天時間將python重新拾起啃一啃,總算對python有了一定的認識。
然后有根據爬蟲基本原理爬取了一本小說,其他爬取小說的方法類似,結果見個人資源下載(本想下載分設置為0,結果CSDN設置最低為2分,沒有積分的可以加我qq要該小說)。
**爬蟲原理:1、模擬人打開一頁小說網頁
2、將網頁保存下來
3、將網頁關鍵字保存下來
4、循環**
環境:python2.7,安裝BeautifulSoup,win7-64bit,sublime text3
需要的基本知識(這些基本的網頁知識我后面有時間會總結下,現在不知道可以先百度下):HTML5基本知識(標簽,屬性),BeautifulSoup基本知識。
小說首頁地址:http://www.xinshubao.net/0/927/45819.html (魂破九天)
爬取該頁內容進行分析:通過分析網頁地址分為兩段,地址頭為:http://www.xinshubao.net/0/927/ 地址尾為45819.html(可以通過網頁獲取到)
代碼如下:
import sys
reload(sys)
sys.setdefaultencoding(
'utf8')
from bs4
import BeautifulSoup
import urllib
def getHtmlCode(url): page = urllib.urlopen(url)html = page.read()
return html
urlHead =
'http://www.xinshubao.net/0/927/'
urlEnd =
'45819.html'
url = urlHead + urlEnd
def parser(url): str1 = getHtmlCode(url)soup = BeautifulSoup(str1,
"html.parser")temp = soup.prettify()
print temp
return soup
parser(url)
通過爬取連續的幾頁分析可知,每章節分為兩頁,兩章內容連在一起就是一章。
1、小說主要內容在<div id="content">標簽中
<div id="content">第一章 狼心狗肺
<br /><br />縱橫帝國,清風鎮。
<br /><br />“頭好痛!”
<br /><br />秦朗感覺大腦一陣刺痛,無數的信息涌進腦海!
<br /><br />十年前,秦家族山!
<br /><br />同年,秦戰海之子,只有五歲的秦朗覺醒武魂,而且是百年難得一見的六星火龍武魂,被譽為清風鎮數百年來的第一天才!
<br /><br />葉家更是錦上添花,將家主之nv葉可清許配給了秦朗!
<br /><br />但讓人大跌眼鏡的是,不知為何,天賦絕佳的秦朗足足用了十年時間,實力依然停留在武徒一重!秦朗更是被廢除了少族長之位!
<br /><br />而反觀與秦朗訂婚的葉可清,不但出落的越來越漂亮,被稱為清風鎮第一美nv!
<br /><br />而且僅用十年時間便修煉到了武徒九重,乃是清風鎮數一數二的天才,與秦朗形成了鮮明對比!
<br /><br />清風鎮人人都在嘆息,真是一朵鮮花cha在了牛糞上!
<script>s3();</script><br />不過,讓所有人不解的是,葉家似乎絲毫沒有要與秦朗解除婚約的意思……
<br />秦朗激動的發現
<br /><br /></div>
2、獲取該標簽內容并通過正則表達式(需要導入re),代碼:
def resolve(url):html=parser(url)content = html.find_all(
'div',id=
'content')content = str(content[
0])content = content.replace(
'<br />',
'')
print content
resolve(url)
結果:
可以看到這個中間還有其他標簽<script>s3();</script>這些標簽不是小說的內容應該刪除,
2.1、將標簽內容替換為空:
def resolve(url):html=parser(url)content = html.find_all(
'div',id=
'content')content = str(content[
0])content = content.replace(
'<br />',
'')match = re.compile(
'<(.*)>')taglist = match.findall(content)
for tag
in taglist:tag =
'<' + tag +
'>'content = content.replace(tag,
'')content = content.replace(
'\n',
'')
print content
resolve(url)
結果:
3、找到下一頁地址
根據網頁源代碼可以找到下一頁的地址:
def nextUrl(url):html = str(parser(url))pattern = re.compile(
'<a href="(.*).html')chapterList = pattern.findall(html)url = urlHead + chapterList[
1] +
'.html'print url
return url
nextUrl(url)
運行結果:http://www.xinshubao.net/0/927/45819_2.html
4、將兩頁連在一起
def resolve(url):html = parser(url)content = html.find_all(
'div',id=
'content')content = str(content[
0])content = content.replace(
'<br />',
'')pattern = re.compile(
'<(.*)>')text = pattern.findall(content)
for line
in text:line =
'<' + line +
'>'content = content.replace(line,
'')content = content.replace(
'\n',
'')tmp = nextUrl(url)index = tmp.find(
'_2')
if -
1 == index: content = content +
'\n\n'print content
return content
5、抓取整篇小說
def main(url):flag =
Truetxt =
''count =
0 while flag:
try:index = url.find(
'9316313_2') f = open(
u'魂破九天.txt',
'a+') tempTxt = resolve(url)f.write(tempTxt)f.close()url = nextUrl(url)
if -
1 != index
or count ==
2000:flag =
Falseexcept Exception
as e:
raiseelse:
passfinally:count = count +
1print u'第%0.1f章 網頁地址 %s'% (count/
2.0,url)
好了整個爬取網頁小說的教程到此結束!
全部代碼如下:
import re
import sys
reload(sys)
sys.setdefaultencoding(
'utf8')
from bs4
import BeautifulSoup
import urllib
def getHtmlCode(url):page = urllib.urlopen(url)html = page.read()
return html
urlHead =
'http://www.xinshubao.net/0/927/'
urlEnd =
'45819.html'
url = urlHead + urlEnd
def parser(url):str1 = getHtmlCode(url)soup = BeautifulSoup(str1,
"html.parser")temp = soup.prettify()
return soup
def nextUrl(url):html = str(parser(url))pattern = re.compile(
'<a href="(.*).html')chapterList = pattern.findall(html)url = urlHead + chapterList[
1] +
'.html'return url
def resolve(url):html=parser(url)content = html.find_all(
'div',id=
'content')content = str(content[
0])content = content.replace(
'<br />',
'')match = re.compile(
'<(.*)>')taglist = match.findall(content)
for tag
in taglist:tag =
'<' + tag +
'>'content = content.replace(tag,
'')content = content.replace(
'\n',
'')urlNext = nextUrl(url)isSameChapter = urlNext.find(
'_2')
if -
1 == isSameChapter:content = content +
'\n\n'return content
def main(url):flag =
Truetxt =
''count =
0 while flag:
try:index = url.find(
'9316313_2') f = open(
u'魂破九天.txt',
'a+') tempTxt = resolve(url)f.write(tempTxt)f.close()url = nextUrl(url)
if -
1 != index
or count ==
2000:flag =
Falseexcept Exception
as e:
raiseelse:
passfinally:count = count +
1print u'第%0.1f章 網頁地址 %s'% (count/
2.0,url)main(url)
結果圖:
總結
以上是生活随笔為你收集整理的python爬虫之一:爬取网页小说(魂破九天)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。