爬虫入门的一点笔记

2018-08-23  本文已影响0人  朕与众爱卿皆瞠目结舌

8月13号开始,用了六天学习了来自传智播客的“六节课掌握爬虫入门”课程,对python爬虫技术有了初步的了解,能够用爬虫的原理写基本的小程序,通过对样例对人人网、豆瓣电影以及糗事百科的爬取,了解了html,xpath等知识。写下总结,以防忘记。视频来源:http://yun.itheima.com/course/368.html

第一课:爬虫基础知识和软件准备

什么是爬虫:

爬虫获取的数据去了哪里:

需要的软件和环境:

浏览器的请求

以上两个的区别,比如我们请求一个JS文件的URL,大家都知道,js文件是用来规范网页显示格式的一种程序,如果我们用浏览器请求,那我们可以看到它正常的显示效果,但当我们用爬虫去请求时,只会拿到一堆字符串,无法执行。

第二课:认识HTTP、HTTPS和requests模块

认识HTTP、HTTPS

requests模块

response的方法:

此方法是把响应的二进制字节流转化为字符串类型

该方法获取网页内容时往往会出现乱码,所以要在此前加上一个response.encoding = "utf-8"

获取发送请求的url地址

获取响应的url地址

请求头

响应头

获取网页原码的方式:

某些网站的 编码方式不是使用的"utf-8"而是"gbk"

因为.text方法是根据响应头部的编码进行推测,所以放到最后使用,有时候也会推测正确

当我们拿到一个网页,用以上三种方式,一定可以获取到网页正确解码方式的字符串

携带header的请求

headers = {
"User-Agent","Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1"
,"Referer":"https://www.baidu.com/link?url=2AZ4aoeuSBsv_DIT2glxe8YKtzrFnpjE6gE0kBfZAIYHR68fCE_qEqJHAwCGLxwZ9EgAWJ1VlgWpsc2AP0w9h8HCCYyk76C4ZkZ31Kkx6Oa&wd=&eqid=b52b5e950002d7ea000000045b7ab019"
,"Cookie":"__cfduid=d1980ca26bf900a830b821bbeb347e14e1524844627; BDUSS=ZZTlpUbjFKSWlzNWd3MFBJTnA2OXRTfjVRM2JtQjExVlNxbXVwRmFuOWhRcGRiQVFBQUFBJCQAAAAAAAAAAAEAAADfpd0Tz8q9o8bvz7rXqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGG1b1thtW9bbF; BIDUPSID=64317FC091E534AA95A51E108E720B05; PSTM=1534572862; BAIDUID=64317FC091E534AA9D2CA222BE99583F:FG=1; PSINO=5; pgv_pvi=8543101952; pgv_si=s5921124352; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; H_PS_PSSID=1441_21124_26350_26921_20929; Hm_lvt_55b574651fcae74b0a9f1cf9c8d7c93a=1534689869,1534750696,1534750859,1534767134; Hm_lpvt_55b574651fcae74b0a9f1cf9c8d7c93a=1534767134; BKWPF=3"
,"Host":"baike.baidu.com"
}

当我们只带header不够的时候,可以带点别的东西进去,比如Referer,Host,还有最重要的Cookie

例子是百度百科“HTTP状态码”词条,代理用的是IPad

注意,这些全部都是放在header里面的,当现实状态码为200时,但没有反应,就是缺Header

第三课:retrying模块的使用和携带cookie的请求

超时参数的使用

retrying模块的使用

假设我们要获取一批url地址,其中某一个地址处于某种原因,链接失败,当我一般碰到链接失败的时候,一般会选择刷新网页,但如果我们发现刷新几次都没有反应,我们就不必在这个地方纠结,直接爬取下一个网页就好了,retrying模块就是起到这个目的。

form retrying import retry

@retry(stop_max_attempt_time = 3)
def func1():
    print("~~~~~~~~~")
    raise ValueError("error!")

上面函数用retry修饰,函数反复执行三次,如果三次全报错,则报错,如果三次中有一次正常运行,则程序继续走。“stop_max_attemp_time”参赛可以更改。

requests模块处理cookie相关请求:

第四课:数据提取方法之json

json

第五课:xpath和lxml模块

xpath

xpath语法

lxml模块

安装lxml

使用

from lxml import etree
elements = etree.HTML('html字符串')
elements.xpath('xpath语句')

第六课:实战训练案例/爬虫流程概念

基础知识补充

一个爬虫的基本流程(讨论)

上一篇 下一篇

猜你喜欢

热点阅读