Python爬虫下载三体小说

Python爬虫的强大功能,加之正则表达式和BeautifulSoup的结合,让Python爬虫可以解决很多有趣的事情的说。

就用Python爬虫下载个人比较喜欢的小说《三体》吧。

st1

1、首先,找到在线的《三体》小说站点,这里选择的是无忧书城

http://www.51shucheng.com/kehuan/santi

查看源代码,分析,每一个单独的三体章节都有一个链接,并且每一个链接通过

<li><a href=“http://xxx”>

格式链接,ctrl+F搜索所有的<li>发现都指向某一个章节,ok,链接部分代码就很简单了

st2

2、点击进入某个章节,查看源代码,发现章节标题是通过

<h1>xxx</h1>

格式呈现的,ok,获取文章标题的源代码也很简单了。

st3

3、查看文章的主要内容,也就是小说的主体内容,发现被包裹在div标签中,且div的class值为neirong,如下:

<div class=”neirong”>

XXX

</div>

st4

所以可以使用BeautifulSoup获取这部分的内容

4、通过以上分析,就可以整合代码,形成我们的爬虫

具体Python爬虫代码如下:

import re
import urllib2
from bs4 import BeautifulSoup as bs

#获取网页内容
def gethtml(url):
    req = urllib2.Request(url)
    response = urllib2.urlopen(req)
    html = response.read()
    return html

#获取文章主内容,使用BeautifulSoup
def getcontents(html):
    soup = bs(html)
    neirong = soup.find('div', attrs={'class': 'neirong'}).contents
    return neirong

#获取每一章链接url
def gettitleurl(url):
    html = gethtml(url)
    reg = r'<li><a href=(.+?)title='
    ulist = re.compile(reg)
    urllist = ulist.findall(html)
    return urllist

#获取每一章标题<h1>
def gettitle(url):
    html = gethtml(url)
    reg = r'<h1>(.+?)</h1>'
    t = re.compile(reg)
    title = t.findall(html)
    return title

if __name__ == '__main__':
    url = "http://www.51shucheng.com/kehuan/santi"
    f = open('santi.txt', 'w+')
    urllist = gettitleurl(url)
    for i in urllist:
        url = i[1:len(i)-2]
        title = gettitle(url)
        for j in title:
            print 'downloading... '+str(j)
            f.write('\n\n'+j)
        neirong = getcontents(gethtml(url))
        for nr in neirong:
            s = nr.string.encode('utf-8')
            f.write(s)
    print 'download success'
    f.close()

5、运行测试,完全OK

运行结束界面:

st5

下载到本地的santi.txt内容也OK

st6

BTW:一切都会逝去 只有死(cheng)神(xin)永生

额,没错,我是圣母黑,哈哈

Have Fun.

您可能还喜欢...