摘要:写在前面本人的所有文章只适合善于使用百度的人,因为所有基础知识个个博客复制粘贴了无数遍,我这里均不会详细讲述。
写在前面
本人的所有文章只适合善于使用百度的人,因为所有基础知识个个博客复制粘贴了无数遍,我这里均不会详细讲述。
在这里我表示所有不经验证的转载都是耍流氓,把一篇篇错误的文章转载的到处都是,不知道浪费了多少人的时间精力去反复调试错误的代码,尤其是对初学者有极大的打击性。
大家在学习python爬虫的过程中,会发现一个问题,语法我看完了,说的也很详细,我也认真看了,爬虫还是不会写,或者没有思路,所以我的所有文章都会从实例的角度来解析一些常见的问题和报错。
环境交代:win10+python3.6
代码非常简单,
模拟登陆,没有
网页标签过滤,没有
多线程,也没有
文本处理,只有涉及到字符串截取
本地文本写入,有
这么低级的代码是因为这个路由器页面非常垃圾,用不到~~~,不过这样也适合初学者观看,当然了,后续会尝试添加更多功能
首先我们对自己的需求要进行分析,新手嘛,先把复杂的东西简单化,模块化,整理出思路,再一步步的去实现,最后整合。
网页编码,编码没有处理好会报错,涉及到一些函数
编码转换,read()方法获取到的非字符串类型,要预先进行处理
方法有很多,正则,字符串截取,等等不一一介绍,适合的才是最好的,我觉得正则是很强大的,但是也是相当反人类的
注意win下路径和linux下路径写法不同
写入的编码类型需要进行处理
重点讲一讲我遇到的坑
一般来讲右键查看页面编码,如图所示,因为在国外是非常奇怪的编码
当时我就蒙蔽了,这是什么鬼~
这个时候我们需要用到chardet库来判断编码类型,拿百度举例,自行百度python第三方库如何安装,这里不做阐述
import chardet import urllib.request html = urllib.request.urlopen("http://www.baidu.com/").read() print (chardet.detect(html))
得到的结果如下:
C:pythonpython.exe D:/python/test/2.py {"encoding": "utf-8", "confidence": 0.99, "language": ""} Process finished with exit code 01.取得字符串
import urllib.request import os from bs4 import BeautifulSoup import time def getHtml(url): html = urllib.request.urlopen(url).read() return html #获取字符串,因为我在国外,路由器low到爆,编码格式也蛋疼了我很久 html = getHtml("http://192.168.0.254/pub/fbx_info.txt") #将read()获取的是bytes编码转化成str html = html.decode("ISO-8859-1")
因为是欧洲网站,获取的却是一个 【ISO-8859-1】的网页编码。
由于这里我们用read()方法读取,获取到的是bytes类型,此时需要转换成str类型的,才可以进行下一步的处理,如果不处理就会有下列错误
TypeError: a bytes-like object is required, not "str"
这里可以使用decode()方法处理一下
html = html.decode("ISO-8859-1")
使用type()方法检测下编码
print(type(html))
反馈,成功
#操作字符串 html = html.split("WAN")[1].split("Ethernet")[0] time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #因为使用记事本,在记事本中换行只认 str = time+html+" "
这里我使用的是split()方法,使用方法呢,推荐大家学会查手册,这里也不详细再解释了。
我通过split()方法截取到了自己需要的字符串,然后用time()函数获取当前本地时间,然后用+连接符把当前本地时间和处理后的字符串连接起来,再在末尾接上换行符rn,因为懒到只用记事本,换行符这里只算一个小坑
# 保存文件为txt,win环境路径 outfile = open("C:UsersswDesktop oute.txt","a+",encoding="utf-8",newline=" ") outfile.write(str) outfile.close() print("文件已保存到本地")
关于open函数,每一个参数,此篇博文讲的非常清楚非常详细,感谢博主的整理,大家可以看看,建议收藏
http://blog.csdn.net/doiido/a...
要强调的有2个参数
encoding和newline,因为用的比较少,然后很多文章并不会提到
有人可能会说,哇,真的懒
没错,我就是懒,而且再说了,写了还没人家写的好,那我何必误人子弟。
下面贴上全部代码
import urllib.request import os from bs4 import BeautifulSoup import time def getHtml(url): html = urllib.request.urlopen(url).read() return html #获取字符串,因为我在国外,路由器low到爆,编码格式也蛋疼了我很久 html = getHtml("http://192.168.0.254/pub/fbx_info.txt") #将read()获取的是bytes编码转化成str html = html.decode("ISO-8859-1") #再次检测编码 #print(type(html)) #操作字符串 html = html.split("WAN")[1].split("Ethernet")[0] time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #因为使用记事本,在记事本中换行只认 str = time+html+" " # 保存文件为txt,注意win环境路径写法 #print(type(str)) outfile = open("C:UsersswDesktop oute.txt","a+",encoding="utf-8",newline=" ") outfile.write(str) outfile.close() print("文件已保存到本地")
本来当初的想法是每秒获取一次流量,写入txt,再读txt,通过数据来绘图
但是有事暂时搁下了,只是win计划任务定时运行,勉强凑活用下日后再学习补充
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41054.html
摘要:简介在使用爬取桔子公司信息,用来进行分析,了解创业公司的一切情况,之前使用写了一个默认线程是的单个实例,为了防止被设置了下载的速度,万多个公司信息爬了天多才完成,现在想到使用分布式爬虫来提高效率。 简介 在使用 scrapy 爬取 IT桔子公司信息,用来进行分析,了解 IT 创业公司的一切情况,之前使用 scrapy 写了一个默认线程是10的单个实例,为了防止被 ban IP 设置了下...
摘要:简介在使用爬取桔子公司信息,用来进行分析,了解创业公司的一切情况,之前使用写了一个默认线程是的单个实例,为了防止被设置了下载的速度,万多个公司信息爬了天多才完成,现在想到使用分布式爬虫来提高效率。 简介 在使用 scrapy 爬取 IT桔子公司信息,用来进行分析,了解 IT 创业公司的一切情况,之前使用 scrapy 写了一个默认线程是10的单个实例,为了防止被 ban IP 设置了下...
摘要:如果该文件已存在,文件指针将会放在文件的结尾。运行结果以上是读取文件的方法。为了输出中文,我们还需要指定一个参数为,另外规定文件输出的编码。 上一篇文章:Python3网络爬虫实战---30、解析库的使用:PyQuery下一篇文章:Python3网络爬虫实战---32、数据存储:关系型数据库存储:MySQL 我们用解析器解析出数据之后,接下来的一步就是对数据进行存储了,保存的形式可以...
摘要:上一篇文章网络爬虫实战请求库安装下一篇文章网络爬虫实战解析库的安装的安装在上一节我们了解了的配置方法,配置完成之后我们便可以用来驱动浏览器来做相应网页的抓取。上一篇文章网络爬虫实战请求库安装下一篇文章网络爬虫实战解析库的安装 上一篇文章:Python3网络爬虫实战---1、请求库安装:Requests、Selenium、ChromeDriver下一篇文章:Python3网络爬虫实战--...
阅读 1049·2021-11-24 09:39
阅读 3578·2021-11-22 13:54
阅读 2541·2021-10-11 10:59
阅读 772·2021-09-02 15:40
阅读 1024·2019-08-30 15:55
阅读 1042·2019-08-30 13:57
阅读 2304·2019-08-30 13:17
阅读 3024·2019-08-29 18:32