Python 网络爬虫之 百度贴吧原创小说
2017-05-08 17:16
411 查看
许多人喜欢看小说吧,我特别喜欢看(以前特别喜欢天蚕土豆的,如今他已经让我们伤透了心,一部大主宰追了三四年。。。。)
好了,言归正传。我经常上贴吧去追新,(不舍得花钱啊)
`哈哈,好了,我们这次要爬取的是百度的小说吧,其他吧也是一样的。
记住爬虫的原理是从网页源码上获取数据。
所以说首先得获取网页源码:
关键词:urllib2 urlopen read
2、匹配标题
涉及到正则表达式
findall (正则,源码)—–返回列表
在源码找到标题标签。
在源码中找到 h3(此乃标题标签) ctrl+c
将上面那定义的函数放进BDTB初始类里面:
在这里顺便说一句(也是挺一个很好的老师说的):许多人对于爬虫,都希望直接获得那个爬虫的源码,这个是没有用的。网站这个千变万化,每天都在变化,所以思路+方法才是重要的。。
这句是为了获取我们所需要的内容,
举个例子:
图中1处表示我们在进行只看楼主下的网址帖子地址
”lz=1这个地方是可以修改的,这个下次在说这个“
看下源码把:
这个步骤我们是要找到标题,所以有一个方便的方法就是:ctrl + f —->输入 h3(h3 是标题的标签)
(如果不太东的话,可以取看看html网页之类的书籍,其实对于这中简单的不懂也没事)
和上面函数中做比较,你会发现,多了很多,,
这里我们要获取其中的标题:即
剩下的我们都不想要,所以可以用一个正则表达式进行匹配 注意到没 :
好了,我们可以打印下看下效果:
看到没,得到了需要的标题
然后有人问,我们就这样在pycharm里面堵小说吗? 着不方便把,所以接下来要做的就是把爬取到的内容存入我们的文档之中。
写文件的操作这里就不多说了啊,大家自己去问度娘就好了(很简单的)
再 打印下,看下效果
上面那个这个是没打之前的,下面是打印之后的,会发现多了个txt
打开你会发现,里面就会有我们爬取到的 标题
好的,
4000
接下来,就要爬取正文了
(其实方法都差不多,重要的还是着个中间的正则表达式 的表示了)
re.compile()这个中间我们同样的要去看网页源码
重要的还是 compile 和 findall 函数,注意这里的用法
然后打印下
文档的存储,你会发现我们爬取的内容已经写入到 txt 中了
好了,到此为止,帖子的小说就可以在自己的txt中读取了,哈哈
自己写的不是很好,有许多不足之处,望不喷啊,可以
多多交流
附上完整代码:
好了,言归正传。我经常上贴吧去追新,(不舍得花钱啊)
`哈哈,好了,我们这次要爬取的是百度的小说吧,其他吧也是一样的。
#-*- coding:utf-8 import urllib2 import re
记住爬虫的原理是从网页源码上获取数据。
所以说首先得获取网页源码:
关键词:urllib2 urlopen read
class BDTB: baseUrl = 'https://tieba.baidu.com/p/5105542905?see_lz=1' #只看楼主地址 #获取网页源码 def getPage(self): url = self.baseUrl request = urllib2.Request(url) # response = urllib2.urlopen(request).read() #打开网页获取源码 print response #这里可打印可不,为了显示效果 return response
2、匹配标题
涉及到正则表达式
findall (正则,源码)—–返回列表
在源码找到标题标签。
在源码中找到 h3(此乃标题标签) ctrl+c
def Title(self): html = self.getPage() #调用获取源码 """写正则了""" """ 这里的r可写可不写,为了编译,提高效率,防止转义""" reg = re.compile(r'<h3 class="core_title_txt pull-left text-overflow " title="(.*?)" style') """正则表达式==上面的""" items = re.findall(reg,html) print items[0]
将上面那定义的函数放进BDTB初始类里面:
在这里顺便说一句(也是挺一个很好的老师说的):许多人对于爬虫,都希望直接获得那个爬虫的源码,这个是没有用的。网站这个千变万化,每天都在变化,所以思路+方法才是重要的。。
re.compile(r'<h3 class="core_title_txt pull-left text-overflow " title="(.*?)" style')
这句是为了获取我们所需要的内容,
举个例子:
图中1处表示我们在进行只看楼主下的网址帖子地址
”lz=1这个地方是可以修改的,这个下次在说这个“
看下源码把:
这个步骤我们是要找到标题,所以有一个方便的方法就是:ctrl + f —->输入 h3(h3 是标题的标签)
(如果不太东的话,可以取看看html网页之类的书籍,其实对于这中简单的不懂也没事)
<h3 class="core_title_txt pull-left text-overflow " title="【原创】《锋寒阳》 仙侠/文/风中吊车" style="width: 396px">【原创】《锋寒阳》 仙侠/文/风中吊车</h3>
和上面函数中做比较,你会发现,多了很多,,
这里我们要获取其中的标题:即
【原创】《锋寒阳》 仙侠/文/风中吊车
剩下的我们都不想要,所以可以用一个正则表达式进行匹配 注意到没 :
(.*?)
好了,我们可以打印下看下效果:
看到没,得到了需要的标题
然后有人问,我们就这样在pycharm里面堵小说吗? 着不方便把,所以接下来要做的就是把爬取到的内容存入我们的文档之中。
#匹配标题 def Title(self): html = self.getPage() #调用获取源码 """写正则了""" """ 这里的r可写可不写,为了编译,提高效率,防止转义""" reg = re.compile(r'<h3 class="core_title_txt pull-left text-overflow " title="(.*?)" style') """正则表达式==上面的""" items = re.findall(reg,html) # print items[0] """切片操作(或者循环 for in操作:如下), 吧第一个元素取出来,中文在可迭代对象里面就是unicode编码""" for item in items: print item """写入文档""" f = open('xiaoshuo.txt','w') #自己去查询百度 f.write('标题'+'\t'+item) #写入 f.close() return items
写文件的操作这里就不多说了啊,大家自己去问度娘就好了(很简单的)
再 打印下,看下效果
上面那个这个是没打之前的,下面是打印之后的,会发现多了个txt
打开你会发现,里面就会有我们爬取到的 标题
好的,
4000
接下来,就要爬取正文了
(其实方法都差不多,重要的还是着个中间的正则表达式 的表示了)
#匹配正文 def Text(self): html = self.getPage() reg = re.compile(r'class="d_post_content j_d_post_content "> (.*?)</div><br> ',re.S) req = re.findall(reg,html) # print req #compile 编译,他提高效率 #这里的class 是给属性命名的意思 for i in req: # print i """爬取正文后, 过滤--首先正则,用空格代替""" removedAddr = re.compile('<a.*?>|</a>') removedddr = re.compile('<img.*?>') removedaddr =re.compile('http.*?.html') """ sub 在正文i中找到杂质removedaddr,然后用空格代替""" """sub(不要的字符,代替的内容,正文)""" i = re.sub(removedAddr,"",i) i = re.sub(removedaddr,"",i) i = re.sub(removedddr,"",i) i = re.sub('<br>',"",i) print i f = open('xiaoshuo.txt','a') f.write('\n\n'+i) f.close()
re.compile()这个中间我们同样的要去看网页源码
重要的还是 compile 和 findall 函数,注意这里的用法
然后打印下
文档的存储,你会发现我们爬取的内容已经写入到 txt 中了
好了,到此为止,帖子的小说就可以在自己的txt中读取了,哈哈
自己写的不是很好,有许多不足之处,望不喷啊,可以
多多交流
附上完整代码:
# -*- coding:utf-8 import urllib2,re class BDTB: baseUrl = 'https://tieba.baidu.com/p/5105937807?see_lz=1' #只看楼主地址 #获取网页源码 def getPage(self): url = self.baseUrl request = urllib2.Request(url) # response = urllib2.urlopen(request).read() #打开网页获取源码 # print response return response #匹配标题 def Title(self): html = self.getPage() #调用获取源码 """写正则了""" """ 这里的r可写可不写,为了编译,提高效率,防止转义""" reg = re.compile(r'<h3 class="core_title_txt pull-left text-overflow " title="(.*?)" style') """正则表达式==上面的""" items = re.findall(reg,html) # print items[0] #切片操作(或者循环 for in操作:如下),吧第一个元素取出来,中文在可迭代对象里面就是unicode编码 for item in items: print item """写入文档""" f = open('xiaoshuo.txt','w') #自己去查询百度 f.write('标题'+'\t'+item) #写入 f.close() return items #匹配正文 def Text(self): html = self.getPage() reg = re.compile(r'class="d_post_content j_d_post_content "> (.*?)</div><br> ',re.S) req = re.findall(reg,html) # print req #compile 编译,他提高效率 #这里的class 是给属性命名的意思 for i in req: # print i """爬取正文后, 过滤--首先正则,用空格代替""" removedAddr = re.compile('<a.*?>|</a>') removedddr = re.compile('<img.*?>') removedaddr =re.compile('http.*?.html') """ sub 在正文i中找到杂质removedaddr,然后用空格代替""" """sub(不要的字符,代替的内容,正文)""" i = re.sub(removedAddr,"",i) i = re.sub(removedaddr,"",i) i = re.sub(removedddr,"",i) i = re.sub('<br>',"",i) print i f = open('xiaoshuo.txt','a') f.write('\n\n'+i) f.close() bdtb = BDTB() #实例化一个类 bdtb.getPage() bdtb.Title() bdtb.Text()
相关文章推荐
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
- Python网络爬虫——我的第二个爬虫(爬取小说信息)
- [Python]网络爬虫:百度贴吧的网络爬虫(v0.4)源码及解析
- Python爬虫实例--爬取百度贴吧小说
- Python网络爬虫——我的第二个爬虫(爬取小说信息)
- 简单的爬虫----爬百度贴吧一篇原创的小说
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析(转)
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
- Python写的百度贴吧的网络爬虫
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
- 【python学习】网络爬虫——爬百度贴吧帖子内容
- Python2.7网络爬虫---简单的爬取百度贴吧的小爬虫
- python 爬虫 网络小说下载(静态网站)
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
- Python爬虫入门实战系列(一)--爬取网络小说并存放至txt文件
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析