爬虫使用urllib.request去爬取小说

Posted 时代的稻草人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫使用urllib.request去爬取小说相关的知识,希望对你有一定的参考价值。

import urllib.request
import re
#1获取主页源代码
#2获取章节超链接
#3获取章节内容
#4下载小说

#驼峰命名法
#注释 获取小说内容
def getNovelContent():
    #获取源代码 HTTP Response对象
    html = urllib.request.urlopen(http://www.quanshuwang.com/book/0/269/)
    html = html.read()
    #print(html)
    #设置编码
    html = html.decode(gbk)
    #获取超链接
    #<li><a href="http://www.quanshuwang.com/book/0/269/78850.html" title="第一章 山边小村,共2741字">第一章 山边小村</a></li>
    #正则表达式 通配符  .*? 匹配所有  (.*?)括号里面是需要的内容  分组匹配
    reg = r<li><a href="(.*?)" title=".*?">(.*?)</a></li>
    #目的是增加效率的,可以不写,但写更好
    reg = re.compile(reg)
    urls = re.findall(reg,html)
    #print(urls)

    for i in urls:
        #print(i[0])
        novel_url = i[0]
        novel_title = i[1]
        chapt = urllib.request.urlopen(novel_url).read()
        chapt_html = chapt.decode(gbk)
        # | ||d r‘ |d‘ 
        reg = </script>&nbsp;&nbsp;&nbsp;&nbsp;(.*?)<script type="text/javascript">
        # S 多行匹配
        reg = re.compile(reg,re.S)
        chapt_content = re.findall(reg,chapt_html)
        #print(chapt_content[0])
        #把没用的替换掉,注意类型进行一次替换之后是列表,br是换行,nbsp是空格
        chapt_content = chapt_content[0].replace(<br />,"")
        #print(type(chapt_content))
        chapt_content = chapt_content.replace(&nbsp;&nbsp;&nbsp;&nbsp;,"")
        #从列表变成字符串了,下面不用加索引
        #print(chapt_content)

        #下载,可以加个提示
        print("正在保存%s"%novel_title)
        # w 读写模式  wb 二进制读写模式,一般用来读写照片和视频  没加具体路径则在py路径下自动新增,也可以保存为doc格式等
        f = open({}.txt.format(novel_title),w)
        f.write(chapt_content)
        f.close


getNovelContent()

没有注释简约版代码:

import urllib.request
import re

def getNovelContent():

    html = urllib.request.urlopen(http://www.quanshuwang.com/book/0/269/)
    html = html.read()
    html = html.decode(gbk)
    reg = r<li><a href="(.*?)" title=".*?">(.*?)</a></li>
    reg = re.compile(reg)
    urls = re.findall(reg,html)

    for i in urls:
        novel_url = i[0]
        novel_title = i[1]
        chapt = urllib.request.urlopen(novel_url).read()
        chapt_html = chapt.decode(gbk)
        reg = </script>&nbsp;&nbsp;&nbsp;&nbsp;(.*?)<script type="text/javascript">
        reg = re.compile(reg,re.S)
        chapt_content = re.findall(reg,chapt_html)
        chapt_content = chapt_content[0].replace(<br />,"")
        chapt_content = chapt_content.replace(&nbsp;&nbsp;&nbsp;&nbsp;,"")

        print("正在保存%s"%novel_title)
        f = open({}.txt.format(novel_title),w)
        f.write(chapt_content)
        f.close

getNovelContent()

 

以上是关于爬虫使用urllib.request去爬取小说的主要内容,如果未能解决你的问题,请参考以下文章

Python urllib2爬虫豆瓣小说名称和评分

python爬虫01-使用urllib爬取网页

Python 爬虫篇 - 通过urllib.request伪装成浏览器绕过反爬虫爬取网页所有连接实例演示,urllib2库的安装

爬虫中urllib库

02. 爬取get请求的页面数据

python网络爬虫《爬取get请求的页面数据》