爬虫学习第一天

1.爬虫的概念

​ 生活的角度:蜘蛛爬网(spider on the net)
​ 互联网:程序在网上收集数据,写一个程序根据url从网页中获取指定的数据。

​ 什么语言可以写爬虫:按理讲啥编程语言都可以写爬虫,但是目前python写爬虫比较方便。

1. php:世界上最好的语言,可以做爬虫,但不支持多线程。
2. java:可以实现的很好,对python竞争大。代码累赘,开发成本高。
3. C\C++:和java一样,代码不简洁
4. python:语法简单,框架强大,Scrapy!

通用爬虫:

​ 百度,谷歌等搜索引擎。功能:爬取整个互联网的页面并生成索引,提供网页检索功能。
限制:网站并不能随意抓取,一般会存在robots.txt协商文件,该文件存在爬取限制指令,限制搜索引擎抓取。

通用爬虫缺点
1. 爬取出的数据没有专门的用处,很多都是垃圾数据
2. 不能根据用户的需求来进行数据的爬取。

聚焦爬虫

​ 专门针对某个网站或者某些关键词进行爬取。

​ 在淘宝的根目录下有这个文件,一个君子协议。
​ 自己写爬虫暂时不用理会这些。

网站排名SEO

​ 1.pagerank,点击率,浏览量。
​ 2.竞价排名。魏则西事件

2.如何实现爬虫

2.1分析网页的特点

1.每一个页面都有自己的url
2.网页是由html组成的
3.网页的传输协议:http,https

2.2爬取思路

1.需要一个url
2.写代码,模拟浏览器进行请求,获得响应数据
3.解析数据,提取出指定的数据。
4.存储数据,保存在文件或数据库中。

2.3开发环境

1.系统:windows,或者ubuntu 64位
2.解释器:python 3.6 
3.编辑器:sublime pycharm

2.4课程介绍

1.如何模拟浏览器进行请求: urllib.request urllib.parse
2.如何解析响应的数据:(正则表达式,bs4,xpath)->html  
    json解析:原生解析,jsonpath(针对接口数据的)
3.如何采集动态的html。DOM操作,Selenium+PhantomJS
4.Scrapy高性能框架:多进程,多线程,队列。
5.Scrapy-redis 部署分布式的爬虫
6.爬虫-反爬虫-反反爬虫 user-agent,代理,验证码,动态的HTML
    不要试图去获取一些不应该拿到的数据,而且难度非常高。
    浏览器能访问到的一般都可以爬出来

3.http协议

3.1 URL组成

例如:http://www.baidu.com:80/index.html?username=xxx&password=12345#lala
由:  协议,       主机,  端口,   资源,            参数,         锚点(name属性设置)
端口:http-80,https-443,ftp-21,ssh-22,mysql-3306,redis-6379,mangodb-27017

3.2HTTP和HTTPS的区别:

1.https需要ca证书,免费的证书很少。
2.http是超文本传输协议。Hyper Text Transport Protocol
3.Https具有安全验证的ssl/tls传输协议
4.http和https具有完全不同的链接方式,端口一般也不一样。
5.HTTP连接是无状态的,(cookie session)。

3.3HTTP的请求和响应

请求:请求行,消息报头(请求头),请求正文(请求体)
(GET /index.html HTTP/1.1),( User-Agent,Accept,Host),()
响应:状态行,响应头,响应正文
(200 ok),(Server,Date,Content-Type,Content-Length),(html,json)

4抓包工具

谷歌浏览器的自带抓包工具:检查-network
专业抓包工具:fiddler
    配置fiddler来抓取https包。
    tools->options->HTTPS->选中Capture,Decrypt,Ignore->点击Actions->Trust->安装证书->重启。
    

5.urllib库

​ 这是python中自带的请求库。
​ 在python2中是引入urllib或者urllib3
​ 在python3中引入urllib.requst,urllib.parse,urllib.error

urllib.request:模拟浏览器发送请求用的
urllib.parse:处理UR或者参数
ur1lib.error:抛出异常,用来处理发送请求的时候出现的异常
urllib.robotsparse:识别robots.txt文件。

5.1响应的获取

输入url获得响应:

urllib.request.urlopen()

二进制读取响应:

response.read()

数据的解码:编码一般是utf8和GBK

print(response.read().decode("utf8"))
#打印主机名
print(response.url)
#打印响应头
print(response.headers)
#响应头部的信息,返回的是列表
print(response.getheaders())
#getcode获取状态码
print(response.getcode())

将响应信息保存到文件中,将响应写入文件

with open("baidu1.html",'w',encoding='utf8') as fp:
    fp.write(response.read().decode('utf8'))

快捷写入文件

url="http://www.baidu.com/"
urllib.request.urlretrieve(url,"baidu2.html")

加载图片

ssl._create_default_https_context=ssl._create_unverified_context

imgurl="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1546432276830&di=7838949ff1a78ea6773b69c8ab76fa92&imgtype=0&src=http%3A%2F%2Fcp2.douguo.net%2Fupload%2Fcaiku%2F1%2F9%2Fe%2Fyuan_190f6d0e5b7e1985da0def60be85416e.jpg"

response=urllib.request.urlopen(imgurl)
with open("cai.png",'wb') as tf:
    tf.write(response.read())

你可能感兴趣的:(爬虫学习第一天)