爬虫准备
- 参考资料
- 前提知识
- url
- http协议
- web前端,html,css,js
- ajax
- re,xpath
- xml
本节包含以下知识
- urlopen
- chardet
- response
- parse
- post
爬虫的介绍
- 爬虫定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本
- 两大特征:
- 三大步骤:
- 下载网页
- 提取想要的信息
- 根据一定规则自动跳到另外的网页上执行上面两步内容
- 爬虫分类
- Python网络包简介
- Python2.X:urllib,urllib2,urllib3,httplib,httplib2,request
- Python3.X:urllib,urllib3,httplib,request
- Python2基本使用urllib和urllib2或者request即可
- Python3基本使用urllib和request
urllib
包含模块
- urllib.request:打开和读取urls
- urllib.error:包含urllib.request产生的常见的错误,使用try捕捉
- urllib.parse:包含一些解析url的方法
- urllib.robotparse:解析robots.txt文件,网站一些针对爬虫的规矩会写在这里面,比如能爬的有哪些不能爬的有哪些,或者告诉你,你一天只能爬一次。
- 案例见1.py
- 在这个案例实现过程中遇到的几个小问题:
- 有的网址爬的很慢有的网址爬的很快,这可能和网站服务器有关,一开始我还以为是我电脑太辣鸡(或许可能就是我电脑辣鸡…)也可能和所爬取网页的内容量有关,因为我爬的是海贼王漫画的网址。
- bytes转换成字符串需要decode,网页的不同可能会抛出这样的异常:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xba in position 244: invalid start byte
这种情况我们可以打开控制台,看一下网页结构,在head中找meta标签,看一下charset属性值,通常是utf-8但是也有国际码gbk的,所以将decode第一个参数传入gbk(这是我爬的网址的charset属性值):decode(“gbk”),我试了一下就报了这样的错,这样一般是decode第二个参数的errors为严格(strict)形式造成的,因为默认strict,最后写成decode(“gbk”,“ignore”)这样问题解决。
from urllib import request
if __name__ == '__main__':
url = "http://manhua.kukudm.com/comiclist/4/index.htm"
rsp = request.urlopen(url)
html = rsp.read()
print(type(html))
html = html.decode("gbk","ignore")
print(html)
网页编码问题解决(我透…原来下节课就讲了,我还在上边自己研究…)
- 来看一下大佬解法吧
- chardet:可以检测页面文件的编码格式,但是可能有误(淦,妙啊…)
from urllib import request
import chardet
if __name__ == "__main__":
url = "https://blog.csdn.net/c406495762/article/details/72858983"
rsp