在学习了python基础后,需要去做下最简单的实战,从目标网页上爬取一些资料
学习最简单的爬虫,需要至少具备哪些知识点
1:html知识
2:基本的python知识
3:爬虫第三方工具
----------------------------------------
1:html知识
这样,我们就先来学习一下网页。
我们每天都看了很多的网页。其实我们看到的内容是经过浏览器处理的。
我们爬取网页的时候,不是去和经过浏览器处理后的我们看到的内容打交道,是和原始的网页内容打交道。
所以。我们需要去了解网页的结构,网页其实就是html文件。
最简单的网页的代码就是由一行代码组成的。
如果以最小化思维来学习一个东西的话,完了,网页学完了,就是这样简单吗?
是的,简单得不可思议。
但是这样的网页,只能用在测试中,因为这个网页没有标题,没有内容,就是一个空白。
我们一般看到的网页中都有一些文字,图片,视频。还有还有一些闪动的广告或者特效。
作为刚开始的人员。我们学习这个网页结构的话,
最起码下方这个代码你要非常明明白白的,不能再简单了。
测试使用的第一个网页中的主体部分!
我们先在桌面上建立一个txt文件,然后把这段代码复制进去,存档。然后改名,比如11.html
这里,这个11类似的部分,名字你用其他字母也是可以的,后缀名部分必须html.
然后,你直接打开这个文件。
我们可以看到网页的标题上面的名字就是我们放在之间的部分。
然后正文的内容,就是之间的了。
———————————————————————————————
2:至少会用导入模块,变量赋值,打印内容。
导入模块:
import urllib.request
在导入某模块的时候,如果提示没有此模块,则是需要你进行安装。
变量赋值
打印内容:
print()
这是最基本的使用命令了,一定要掌握。
使用的时候,我们需要在括号中输入需要打印的变量。
比如我们需要打印某个html网页的内容。那么首先我们需要提取到这个网页的内容。
这就是第三方模块的功能所做的事情了。
然后我们打印的时候,如果编码不对,我们在打印的时候,需要在打印的时候带上编码,这样系统就以我们能认识的编码把内容展现给我们了。
这里提醒下,我们使用的是python3.6版本了。
所以最基本的打印命令是print()
和python2.x当中使用的是不同的。
———————————————————————————————
3:爬虫第三方模块
我们使用request模块,当然我们首先需要安装request模块
import urllib.request
#发出请求并且接收返回文本对象
html = re.read()
#调用read()进行读取
print(html)
#打印
由于内容较多,我截图了前面的一部分,然后上面的内容呢?我们基本都不认识。没看到内容里面有中文,这是因为编码的问题。
我们如何知道被爬的目标的编程是哪种类型呢?
我们需要一个专门的模块chardet,
我们在使用一个模块的时候,要先导入她。
import chardet
ch1 = chardet.detect(html)
print(ch1['encoding'])
******************************
>>> import chardet
>>> ch1 = chardet.detect(html)
>>> print(ch1['encoding']
... )
utf-8
>>>
*****************************
我们修改上面的输出代码
>>> html = re.read()
>>> ch1 = chardet.detect(html)
>>> print(ch1)
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
>>> print(html.decode(ch1['encoding']))
由于页面较多,我截图了第一页。
我们可以看到,截图里面的内容,里面已经有了中文。
最后,我们看看这个使用的第三方ullib这个库
urllib request 模块提供了最基本的构造 HTTP 请求的方法, 利用它可以模拟浏览器的请求发起过程
url 我们所要请求的网址(有些网站可能会有登陆操作,所以这里不全是我们所要爬取的网址,而要经过中间的一些过程)我们可以把url,也就是网址,写在这个括号中。类似
也可以提前把网址定义在一个变量中。
data 参数是可选的,如果要添加 data ,它要是字节流编码格式的内容,即 bytes 类型,通过 bytes() 函数可以进行转化,另外如果你传递了这个 data 参数,它的请求方式就不再是 GET 方式请求,而是 POST 。timeout 参数可以设置超时时间,单位为秒,意思就是如果请求超出了设置的这个时间还没有得到响应,就会抛出异常,如果不指定,就会使用全局默认时间。它支持 HTTP 、 HTTPS 、 FTP 请求。其他参数 还有 context 参数,它必须是 ssl.SSLContext 类型,用来指定 SSL 设置。cafile 和 capath 两个参数是指定CA证书和它的路径,这个在请求 HTTPS 链接时会有用。cadefault 参数现在已经弃用了,默认为 False 。我们上面使用的时候,就是括号中直接写了一个URL.
注意:python是区分大小写的语言。url和URL是截然不同的变量。