python3+beautifulSoup4.6抓取某网站小说(二)基础功能设计
本章学习内容:
1、网页编码还原读取
2、功能设计
stuep1:网页编码还原读取
本次抓取对象:
http://www.cuiweijuxs.com/jingpinxiaoshuo/ 按照第一篇的代码来进行抓取:
# -*- coding: UTF-8 -*-
from urllib import request if __name__ == "__main__":
chaper_url = "http://www.cuiweijuxs.com/jingpinxiaoshuo/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = request.Request(url=chaper_url, headers=headers)
response = request.urlopen(req)
html = response.read()
print(html)
打印出
b'<!doctype html>\r\n<html>\r\n<head>\r\n<title>\xbe\xab\xc6\xb7\xd0\xa1\xcb\xb5_………………
这样的内容,这个是编码格式的问题,在zipfile解压乱码的文章中已经说过了,所以需要先看下这个html网页的头部,看到编码格式是gbk
具体看http://www.cnblogs.com/yaoshen/p/8671344.html
另外一种程序检测方法是使用chardet(非原生库,需要安装),
charset = chardet.detect(html)
print(charset)
检测内容:{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
如果使用GB2312来解码是有问题的,尝试过后发现还是gbk比较有效,包含字符多一点
改写代码如下:
html = html.decode('GBK')
#except:
# html = html.decode('utf-8')
print(html)
完整代码如下:
# -*- coding: UTF-8 -*-
from urllib import request
import chardet if __name__ == "__main__":
chaper_url = "http://www.cuiweijuxs.com/jingpinxiaoshuo/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = request.Request(url=chaper_url, headers=headers)
response = request.urlopen(req)
html = response.read()
print(html) # 查看网页编码格式
charset = chardet.detect(html)
print(charset) # 查看网页内容
#try:
html = html.decode('GBK')
#except:
# html = html.decode('utf-8')
print(html)
stuep2:基础功能设计
建立class:Capture,定义初始化(__init__)、读取(readHtml)、保存(saveHtml)等基础功能函数,然后创建一个run函数来集成运行功能,
最后使用Capture().run()来运行
(1) __init__方法(双下划线),初始化参数
def __init__(self):
# 定义抓取网址
self.init_url = 'http://www.cuiweijuxs.com/jingpinxiaoshuo/'
# 定义headers
self.head = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19'}
(2)将读取网页包装为一个方法,并返回解析后等html对象
def readHtml(self):
# 以CSDN为例,CSDN不更改User Agent是无法访问的
# 创建Request对象
print(self.init_url)
req = request.Request(self.init_url, headers=self.head)
# 传入创建好的Request对象
response = request.urlopen(req)
# 读取响应信息并解码
html = response.read().decode('GBK')
# 打印信息
print(html)
return html
(3)将读取的网页以utf-8的方式写入到文件中
def saveHtml(self, file_name, file_content):
file_object = open(file_name, 'w', encoding='utf-8')
file_object.write(file_content)
file_object.close()
(4)调用run方法,读取网页,再保存
def run(self):
try:
html = self.readHtml()
self.saveHtml('test.html', html)
except BaseException as error:
print(error) Capture().run()
完整代码如下:
# -*- coding: UTF-8 -*-
from urllib import request class Capture: def __init__(self):
# 定义抓取网址
self.init_url = 'http://www.cuiweijuxs.com/jingpinxiaoshuo/'
# 定义headers
self.head = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19'} def readHtml(self):
# 以CSDN为例,CSDN不更改User Agent是无法访问的
# 创建Request对象
print(self.init_url)
req = request.Request(self.init_url, headers=self.head)
# 传入创建好的Request对象
response = request.urlopen(req)
# 读取响应信息并解码
html = response.read().decode('GBK')
# 打印信息
print(html)
return html def saveHtml(self, file_name, file_content):
file_object = open(file_name, 'w', encoding='utf-8')
file_object.write(file_content)
file_object.close() def run(self):
try:
html = self.readHtml()
self.saveHtml('test.html', html)
except BaseException as error:
print(error) Capture().run()
python3+beautifulSoup4.6抓取某网站小说(二)基础功能设计的更多相关文章
- python3+beautifulSoup4.6抓取某网站小说(四)多线程抓取
上一篇多文章,是二级目录,根目录"小说",二级目录"作品名称",之后就是小说文件. 本篇改造了部分代码,将目录设置为根目录->作者目录->作品目录- ...
- python3+beautifulSoup4.6抓取某网站小说(三)网页分析,BeautifulSoup解析
本章学习内容:将网站上的小说都爬下来,存储到本地. 目标网站:www.cuiweijuxs.com 分析页面,发现一共4步:从主页进入分版打开分页列表.打开分页下所有链接.打开作品页面.打开单章内容. ...
- python3+beautifulSoup4.6抓取某网站小说(一)爬虫初探
本次学习重点: 1.使用urllib的request进行网页请求,获取当前url整版网页内容 2.对于多级抓取,先想好抓取思路,再动手 3.BeautifulSoup获取html网页中的指定内容 4. ...
- Python3.x+Fiddler抓取APP数据
随着移动互联网的市场份额逐步扩大,手机APP已经占据我们的生活,以往的数据分析都借助于爬虫爬取网页数据进行分析,但是新兴的产品有的只有APP,并没有网页端这对于想要提取数据的我们就遇到了些问题,本章以 ...
- Python3.x:抓取百事糗科段子
Python3.x:抓取百事糗科段子 实现代码: #Python3.6 获取糗事百科的段子 import urllib.request #导入各类要用到的包 import urllib import ...
- Python多进程方式抓取基金网站内容的方法分析
因为进程也不是越多越好,我们计划分3个进程执行.意思就是 :把总共要抓取的28页分成三部分. 怎么分呢? # 初始range r = range(1,29) # 步长 step = 10 myList ...
- 使用BurpSuite抓取HTTPS网站的数据包
昨天面试,技术官问到了我如何使用BurpSuite抓取https网站的数据包,一时间没能回答上来(尴尬!).因为以前https网站的数据包我都是用Fiddler抓取的,Fiddlert自动帮我们配置好 ...
- Python3利用BeautifulSoup4批量抓取站点图片的代码
边学边写代码,记录下来.这段代码用于批量抓取主站下所有子网页中符合特定尺寸要求的的图片文件,支持中断. 原理很简单:使用BeautifulSoup4分析网页,获取网页<a/>和<im ...
- 用python抓取求职网站信息
本次抓取的是智联招聘网站搜索“数据分析师”之后的信息. python版本: python3.5. 我用的主要package是 Beautifulsoup + Requests+csv 另外,我将招聘内 ...
随机推荐
- r.json()
requests模块中,r.json()为Requests中内置的JSON解码器 其中只有response返回为json格式时,用r.json()打印出响应的内容, 如果response返回不为jso ...
- 关于使用jxl去读写Excel文件
1.引入maven依赖 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifact ...
- windows server 2003 修改远程链接端口
服务器默认的远程链接的端口是3389,只能内网访问,外网不能访问,现映射了8400端口给服务器,内外网都可以访问,因此需要修改服务器的远程链接的端口. 运行中 输入:regedit 选择十进制,将33 ...
- Word Cloud (词云) - Matlab
今天要总结的是 Word Cloud 最后一个部分了,用 Matlab 来创建 word cloud.Matlab R2018b 已经提供 wordcloud 函数可以直接生成词云了. >> ...
- C#后台调用Http外网接口(GET, POST)
1.get方法调用接口获取json文件内容 public void GetFunction() { string serviceAddress = ...
- shiro之IniRealm
Shiro认证过程 创建SecurityManager--->主体提交认证--->SecurityManager认证--->Authenticsto认证--->Realm验证 ...
- 给Ambari集群里安装可视化分析利器工具Hue步骤(图文详解)
扩展博客 以下,是我在手动的CDH版本平台下,安装Hue. CDH版本大数据集群下搭建Hue(hadoop-2.6.0-cdh5.5.4.gz + hue-3.9.0-cdh5.5.4.tar.gz) ...
- 1.1.2最小生成树(Kruskal和Prim算法)
部分内容摘自 勿在浮沙筑高台 http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义: 连通图:在无向图中,若任意 ...
- (二)python高级特性
一.切片 >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python ...
- Java实现三角形计数
题: 解: 这道题考的是穷举的算法. 一开始看到这道题的时候,本能的想到用递归实现.但使用递归的话数据少没问题,数据多了之后会抛栈溢出的异常.我查了一下,原因是使用递归创建了太多的变量, 每个变量创建 ...