抓取网页生成电子书(网上无法下载的“小说在线阅读”内容?有种Python2.7基础知识)
优采云 发布时间: 2022-03-08 15:08抓取网页生成电子书(网上无法下载的“小说在线阅读”内容?有种Python2.7基础知识)
你还在为无法在线下载的“小说在线阅读”内容而烦恼吗?或者是一些文章的内容让你有采集的冲动,却找不到下载链接?你有没有想自己写一个程序来完成这一切的冲动?你是不是学了python,想找点东西炫耀一下自己,告诉别人“兄弟真棒!”?所以让我们开始吧!哈哈~
嗯,最近刚写了很多关于Yii的东西,想找点东西调整一下.... = =
本项目以研究为目的。在所有版权问题上,我们都站在作者一边。想看盗版小说的读者,要自己面对墙!
说了这么多,我们要做的就是从网页上爬下小说正文的内容。我们的研究对象是全本小说网....再次声明,我们不对任何版权负责....
一开始,做最基础的内容,即抓取某一章的内容。
环境:Ubuntu,Python 2.7
基础知识
本程序涉及到的知识点有几个,这里罗列一下,不赘述,会有一堆直接百度的疑惑。
1. urllib2 模块的请求对象,用于设置 HTTP 请求,包括获取的 url,以及伪装成浏览器代理。然后就是urlopen和read方法,很好理解。
2.chardet 模块,用于检测网页的编码。网页抓取数据时容易遇到乱码问题。为了判断网页是gtk编码还是utf-8,使用chardet的detect函数进行检测。使用Windows的同学可以在这里下载,解压到python的lib目录下。
3. decode函数将字符串从某种编码转换为unicode字符,encode将unicode字符转换为指定编码格式的字符串。
4. re 模块正则表达式的应用。搜索功能可以找到匹配正则表达式的项目,replace是替换匹配的字符串。
思路分析:
我们选择的网址是斗罗大陆第一章。可以查看网页的源码,会发现只有一个内容标签收录了所有章节的内容,所以可以使用正则表达式匹配内容标签并抓取。试着把这部分打印出来,你会发现很多
和 ,
换行,就是网页中的占位符,也就是空格,换成空格就行了。这一章的内容非常漂亮。为了完整起见,也使用正则来爬下标题。
程序
<p>
# -*- coding: utf-8 -*-
import urllib2
import re
import chardet
class Book_Spider:
def __init__(self):
self.pages = []
# 抓取一个章节
def GetPage(self):
myUrl = "http://www.quanben.com/xiaoshuo/0/910/59302.html";
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(myUrl, headers = headers)
myResponse = urllib2.urlopen(request)
myPage = myResponse.read()
#先检测网页的字符编码,最后统一转为 utf-8
charset = chardet.detect(myPage)
charset = charset['encoding']
if charset == 'utf-8' or charset == 'UTF-8':
myPage = myPage
else:
myPage = myPage.decode('gb2312','ignore').encode('utf-8')
unicodePage = myPage.decode("utf-8")
try:
#抓取标题
my_title = re.search('(.*?)',unicodePage,re.S)
my_title = my_title.group(1)
except:
print '标题 HTML 变化,请重新分析!'
return False
try:
#抓取章节内容
my_content = re.search('(.*?)