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爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...
随机推荐
- django项目部署在Apache服务器中,静态文件路径的注意点
django Apache部署静态文件的路径注意点 静态文件放在对应的 app 下的 static 文件夹中 或者 STATICFILES_DIRS 中的文件夹中. 当 DEBUG = True 时, ...
- ThinkPHP的create方法的一系列操作
1.数据操作状态 create方法的第二个参数可以指定数据的操作状态,默认是自动判断的(写入[Model:MODEL_INSERT或者1].更新[Model:MODEL_UPDATE或者2].也可以自 ...
- MySQL第二天
回顾 数据库基础知识: 关系型数据库(磁盘)和非关系型数据库(内存) 关系型数据库: 建立在关系模型上的数据库 数据结构: 二维表(比较浪费空间) 操作数据的指令集合: SQL(DDL,DML ...
- 0401-服务注册与发现、Eureka简介
一.硬编码问题 解决方案:nginx.或.服务注册与发现 二.服务发现 注册.心跳机制 三.服务发现组件的功能 1.服务注册表:是一个记录当前可用服务实例的网络信息的数据库,是服务发现机制的核心.服务 ...
- 视频解码芯片SAA7111A的初始化
为了完成SAA7111A的初始化,FPGA需要完成I2C控制器的设计. 之前本科的时候初步接触过I2C,但是编写一个Verilog的控制器还是觉得有点难度的.说实话,那时候都无从下手,对实现这样一个协 ...
- 3.4 使用STC89C52控制MC20解析GPS的经纬度数据在LCD1602上显示
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- GPS USB驱动串口被占用
1.一般是装了错误的驱动,显示如下 2.实际装好应该是显示的 3.驱动选择,先卸载了上面的virtual驱动,安装下面箭头指向的驱动 这里的卸载很重要,先点设备管理器的--查看--显示隐藏设备, 然后 ...
- sed Demo
@1:sed basic usage: 和AWK一样, sed也是逐行对文本进行处理. sed的主要功能如下: @1:对每行中的匹配项进行处理(修改/删除) @2:格式化文本的处理 @3:(行的增删改 ...
- yii 2 局部关闭 CSRF 拦截
最近在拿 yii 2.0 开发ajax提交,在 post 请求接口时,提示数据无法验证,于是查询 yii 错误日志,发现错误为 exception ‘yiiwebBadRequestHttpExcep ...
- Loadrunder脚本篇——web_submit_data实现提交post请求
概述 web_link()和web_url()函数都是页面访问型函数,实现HTTP请求中的GET方法,如果需要实现POST方法,可使用web_submit_form或web_submit_data() ...