用python爬虫爬取网站的章节目录及其网址

2019-01-02  本文已影响0人  大大蟹将军

认识爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。(引用自百度百科)

爬取网站

在此笔者爬取了神印王座,神印王座全文阅读 已完结 – 唐家三少作品网站上的一部小说,一下是该源网址打开后的章节目录。


接下来,我们便打开其网址的源代码:

我们看到源代码是应该用'''utf-8'''格式来解析的。然后我们便可以编写我们的代码了!

构建爬虫

from urllib import request

import re                

def getReq(url):

  url_req = request.urlopen(url)

  return url_req

web_and_page = []

http_req = getReq("http://www.jueshitangmen.info/shenyinwangzuo/")

data = http_req.read().decode('UTF-8')

前面两行引入了"reques"爬虫包,之后定义了一个函数,这个函数用来抓取源网址的源代码,最后就是从上文得出解析格式是用'' utf-8''。这之后整个网页的源代码我们都爬取到了。以下便是爬取到的数据的截取部分:



我们可以从这张图片的左上角的滚轮中可以看出整个网页的源代码数据还是挺大的,但是我们需要爬取的是此网站的章节目录及其网址,那么,我们就需要将我们的爬虫程序整体优化,以此来得到我们所想要的数据。

代码优化


以上便是需要爬取的数据,其中有章节目录及其网址,那么找到每一行之间相同的代码便是:

<li><span><a href="
" rel="bookmark">
</a></span></li>

这是每一前部、中部以及尾部相同的代码。 那么就可以根据前部和尾部相同代码把我们需要的章节目录及其网址爬取出来:

    tr = re.findall(r'<li><span><a(.*)</a></span></li>',data,re.S)

在此代码中,从刚刚爬取的数据''data''中截取前部是''<li><span><a href" ''到尾部''</a></span></li>''之间的数据 (包括前部和尾部)



代码写到这里,说明我们的目标已经完成一半了,但行百里者半九十 ,至此,还不能松懈,因为我们可以看到我们爬取到的数据中还有一些无关代码,那么我们需要将这些代码清除 。而'''replace''' 便是我们需要用到的函数,相信很多人也知道replace语义便是代替,所以我们现在做的就是将这些无关代码用空格符来代替,以下便是具体代码:

    firsttable = firsttable.replace('href="', ' ')

''replace('','')''左边单引号内便是需要被替换的代码,而右边单引号是替换代码,所以我们根据'''replace'''来将那些无关代码一一用空格代替。



这便是我们所需要的数据,左边是网址,右边是目录,但是这个网页的源代码和子网址是在一起的,所以我们的爬取程序便少了一步。之后,我又爬取了一个网站,也是同一部小说,但是这个网站的源代码里面就只有一个子网和章节目录。所以我又开始了新一轮的爬取。

子网与源网址的连接


从此图我们可以看到现在我爬取的网址是一个不完全的网址,这便是这个网站子网网址,如果我们就此复制子网网址,然后在浏览器中打开我们是打不开的,所以我们需要将其源网址连接子网址。

    for hl in htmllist:

        newurl = "https://www.9dxs.com/1/1026/"+hl

        firsttable = newurl.replace('">', ' ')

我利用了一个'''for'''循环将源网址和子网址用“+”连接起来,然后也清除了一下无关代码



这张图与上一图对比,就是将一些无关代码清除并且加上了源网址。到这一步,我们便可以将我们爬取的章节目录及其网址保存在我们的电脑中,以后想看这部小说就可以直接复制小说章节的网址然后在浏览器中打开即可。

保存数据

    outfile = open('爬取网络小说神印王座的章节目录的网址1.txt','w')

    outfile.write(firsttable)

    outfile.close()

以上代码便是一个打开 文件的方法,利用''open''方法打开我们需要保存到的“txt”文件中。在此之前我是没有这个“爬取网络小说神印王座的章节目录的网址1.txt”文件的,利用''open''会在你安装python的文件夹里新建一个同名 文件,以此来打开这个文件。'w'代表着读写这个文件,例如一些基本的文件操作'r'便是只读 ,而不能修改这个文件。第二行我们便把我们爬取到的数据存储到了这个文件中,之后 我们关闭这个文件。


打开“爬取网络小说神印王座的章节目录的网址1.txt”文件的 效果图

以上便是用python爬虫爬取网站数据的一个小程序,顺带附上自己整个爬取程序。

from urllib import request

import re

def getReq(url):

    url_req = request.urlopen(url)

    return url_req

web_and_page = []

http_req = getReq("https://www.9dxs.com/1/1026/index.html")

data = http_req.read().decode('gbk')

tr = re.findall(r'<li><a (.*)</a></li>',data , re.S)

firsttable = tr[0]

def getHtml(data):

    htmllist = re.findall(r'href="(.*?)</a></li>',firsttable)

    return htmllist

htmllist = getHtml(data)

outfile = open('爬取网络小说神印王座的章节目录的网址1.txt','w')

for hl in htmllist:

    newurl = "https://www.9dxs.com/1/1026/"+hl

    firsttable = newurl.replace('">', ' ')

    print(firsttable)

outfile.write(firsttable+'\n')

outfile.close()
上一篇 下一篇

猜你喜欢

热点阅读