Python爬虫之利用BeautifulSoup爬取豆瓣小说(三)——将小说信息写入文件
#-*-coding:utf-8-*- import urllib2 from bs4 import BeautifulSoup class dbxs: def __init__(self): self.pageIndex = 0 self.enable = True self.file = None self.content = [] #获取html页面的内容 def getPage(self, pageIndex): try: #设置代理ip enable_proxy = True proxy_handler = urllib2.ProxyHandler({'Http': '113.118.170.230:808'}) null_proxy_handler = urllib2.ProxyHandler({}) if enable_proxy: opener = urllib2.build_opener(proxy_handler) else: opener = urllib2.build_opener(null_proxy_handler) urllib2.install_opener(opener) #获得页面响应的内容 url = 'https://www.douban.com/tag/%E5%B0%8F%E8%AF%B4/book' + "?start=" + str(pageIndex) #设置请求头部信息,模拟浏览器的行为 my_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0)'} request = urllib2.Request(url, headers = my_headers) response = urllib2.urlopen(request) return response.read() except urllib2.URLError, e: if hasattr(e, "code"): print e.code if hasattr(e, "reason"): print e.reason return None #过滤查找这一页的小说名字,信息和评分 def getContent(self, pageIndex, content): pageCode = self.getPage(pageIndex) soup = BeautifulSoup(pageCode, 'html.parser') #在获得相应的内容中找出所有标签为<dd>的内容(里面包含了我们需要的小说信息) contents = soup.find_all('dd') if contents: for item in contents: title = item.find(class_ = 'title').string.encode('utf-8') info = item.find(class_ = 'desc').string.strip().encode('utf-8') rate = item.find(class_ = 'rating_nums') #通过试验,我们发现某一页可能存在小说没有评分,如果我们不判断rate,那么可能就出现报错 if rate: rates = rate.string.encode('utf-8') content.append([title, info, rates]) else: content.append([title, info]) #如果页面不包含<dd>标签,我们应该停止 else: print u"所有页面已加载完" self.enable = False return content #写入文件 def writeData(self, content): self.file = open("bdxs.txt", "w+") #必须在for循环外面,不然每一次写入都会覆盖之前的数据 for item in content: if len(item) == 3: self.file.write(item[0] + "\n") self.file.write(item[1] + "\n") self.file.write(u"评分:" + item[2] + "\n\n") else: self.file.write(item[0] + "\n") self.file.write(item[1] + "\n") self.file.write("========================================\n\n") #创建一个开始方法 def start(self): x = 1 while self.enable == True: content = self.getContent(self.pageIndex, self.content) if self.enable == True: print "正在写入第%s页..." %x self.writeData(content) self.pageIndex += 15 x += 1 DBXS = dbxs() DBXS.start()
这段代码我还没理解透彻,比如每一页的小说信息写入完成后,怎么在后面加上第几页,后期我将继续完善它。
Python爬虫之利用BeautifulSoup爬取豆瓣小说(三)——将小说信息写入文件的更多相关文章
- Python爬虫之利用BeautifulSoup爬取豆瓣小说(一)——设置代理IP
自己写了一个爬虫爬取豆瓣小说,后来为了应对请求不到数据,增加了请求的头部信息headers,为了应对豆瓣服务器的反爬虫机制:防止请求频率过快而造成“403 forbidden”,乃至封禁本机ip的情况 ...
- Python爬虫之利用BeautifulSoup爬取豆瓣小说(二)——回车分段打印小说信息
在上一篇文章中,我主要是设置了代理IP,虽然得到了相关的信息,但是打印出来的信息量有点多,要知道每打印一页,15个小说的信息全部会显示而过,有时因为屏幕太小,无法显示全所有的小说信息,那么,在这篇文章 ...
- python爬虫:利用正则表达式爬取豆瓣读书首页的book
1.问题描述: 爬取豆瓣读书首页的图书的名称.链接.作者.出版日期,并将爬取的数据存储到Excel表格Douban_I.xlsx中 2.思路分析: 发送请求--获取数据--解析数据--存储数据 1.目 ...
- python爬虫:利用BeautifulSoup爬取链家深圳二手房首页的详细信息
1.问题描述: 爬取链家深圳二手房的详细信息,并将爬取的数据存储到Excel表 2.思路分析: 发送请求--获取数据--解析数据--存储数据 1.目标网址:https://sz.lianjia.com ...
- Python爬虫使用lxml模块爬取豆瓣读书排行榜并分析
上次使用了BeautifulSoup库爬取电影排行榜,爬取相对来说有点麻烦,爬取的速度也较慢.本次使用的lxml库,我个人是最喜欢的,爬取的语法很简单,爬取速度也快. 本次爬取的豆瓣书籍排行榜的首页地 ...
- Python爬虫之利用正则表达式爬取内涵吧
首先,我们来看一下,爬虫前基本的知识点概括 一. match()方法: 这个方法会从字符串的开头去匹配(也可以指定开始的位置),如果在开始没有找到,立即返回None,匹配到一个结果,就不再匹配. 我们 ...
- Python爬虫实战二之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...
- Python爬虫实战一之爬取糗事百科段子
大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...
- 转 Python爬虫实战二之爬取百度贴吧帖子
静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...
随机推荐
- XE2安装JVCL
XE2安装JVCL1. 下载:要分别下载JCL和JVCL安装包,不可以图省事不下载前者.http://sourceforge.net/projects/jcl/files/JCL%20Releases ...
- Unity字体文件放Resources和打成ab对比
情况一:公共字体打成ab的时候,加载A界面的时候加载了font的ab,卸载A和font的ab后,接着加载B界面,加载了font的ab,卸载B和font的ab,这时候字体对应的asset会在内存里有两份 ...
- Python3.6全栈开发实例[013]
13.用户输入的信息,如果出现了列表中的敏感词汇,请用*替代. li = ["苍老师","东京热","武藤兰","波多野结衣&qu ...
- 我的Android进阶之旅------>Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi")
Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi") 例如:AndroidManifest.xml中,我们配置了sdk版本的 ...
- jQuery实现复选框全选、全不选、反选问题解析
今天打算用jQuery实现一下复选框的全选.全不选和反选问题,刚开始用的是attr("checked",true/false)方法,发现只能在最开始实现一次全选,可以实现全不选,无 ...
- MySQL学习思维导图
结束:分享在线下载地址 https://www.xmind.net/m/7t6U/
- springboot整合Ehcache
首先引入maven包: <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...
- 关于IDEA导出项目jar包/runnable jar
将项目导出为jar包分为 runnable jar 与 普通jar包 一.导出为普通jar包 该jar包中只有项目源代码, java -cp wordcount.jar 用来运行普通jar包 1.打开 ...
- iOS NSCoding 的学习 和 使用
起初接触的轻量级 物理存储 方式 是 plist 可以存储 系统级别的 字典 数组 但是不能存储自定义的对象类 那会 用自定义对象做存储的 需求也不大 主要 是 还没建立面向对象意识,会的也少. ...
- 线程同步synchronized和ReentrantLock
一.线程同步问题的产生及解决方案 问题的产生: Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不准确,相互之间产生冲突. 如下例:假设有一个卖票 ...