开启Python爬虫之旅的第一天

一、爬虫概念

1.爬虫是什么:

卡卡写一段代码,代码的功能能从互联网中提取数据信息

2.互联网:

每一个互联网都有一个节点,节点就是一个Url(统一资源定位符),很多a链接组成 

3.互联网爬虫:

简单来说互联网爬虫就是写代码,模拟浏览器访问节点(Url),从而提取数据内容。通俗易懂

4.能用哪些语言实现爬虫?

(1)PHP(自称最优美的语言,谁用谁知道。不是难用,关键你这PHP天生就对多线程、多进程支持的就不是很友好,优美有啥用,老哥?)

(2)Java(是咱们Python最主要的竞争对手,学Python吗肯定得喷一下他们的缺点呀,比如代码臃肿,项目重构代价大等等,不敢多喷,毕竟在互联网行业还是Java学的人多,瑟瑟发抖不敢说话)

(3)C,C++(大佬,绝对的大佬。Python这种编译性语言也是根据C来编写的,用C,C++来写爬虫不说别的,就是NB。如果有C,C++爬虫大佬。请收下我的膝盖)

(4)Python(到自己家了哈,那不吹不黑,代码简洁对吧,学习成本低对吧,支持模块多也没错吧,关键还有专门的爬虫框架Scrapy框架,你说是有多方便,多便捷。这都是知识点呀,

5.通用爬虫、聚焦爬虫

通用爬虫:

搜索引擎:百度、360、火狐、谷歌等 

①从互联网上抓取所有的数据   ②对数据进行处理   ③对用户提供检索服务

例如百度抓取新的内容?

①主动将域名提交给百度    ②在其他网站设置友情链接    ③自己会和DNS(域名系统)服务商进行合作

        有些东西我不想让你百度爬取信息,淘宝就不让百度爬取信息,你都爬出来了,我还挣哪门子钱。所以在一些大型的互联网公司都有一个协议

Robots协议:这个Robots协议简单来说就是一个君子协议。这个协议就是一个文件,让在你网站的根目录。在写到框架的时候在说这个协议。(像咱们这些写的爬虫程序,你就先没必要遵从,毕竟是学习吗。)

对了,科普一下。百度搜索中一些排名分为两种方式:

①根据pagerank的值进行排名      ②竞价排名,谁出价高就先把谁放到前面。太烧钱了

通用爬虫的缺点:

1.抓取的很多数据都是没用的

2.不能根据需求来抓取信息

聚焦爬虫:

    根据自己需求来抓取你所需要的数据信息。

如何实现抓取指定的数据?

①每一个网页都有自己唯一的Url

②网页都是有html组成的

③网页传输使用的都是http、https协议

    聚焦爬虫的思路分为以下三步:

        第一步:要抓取网页的Url

        第二步:写代码模拟浏览器发送Http请求

        第三步:解析网页内容,字符串处理,根据指定规则提取数据 

6.开发环境:

windows、linux都可以
        python 3.x  64位

编辑工具:pycharm   sublime

7.整体内容介绍:

①         模拟浏览器发送请求

urllib.request \ urllib.parse\ requests

②            解析内容

正则表达式、bs4、xPath、jsonpath

③            动态html

selenium+phantomjs

④            scrapy框架学习

⑤            scrapy-redis组件

⑥            涉及到爬虫-反爬虫-反反爬虫   内容

 User-Agent、代理、验证码、动态数据
            最终:理论上,只要浏览器能够访问的数据,你的程序就能访问

            模拟登录


二、Http协议

1.上网原理:
     如下图


 

2.http与https的区别:

  1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

  2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

  3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

  4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

http://www.baidu.com:80/index.html?username=goudan&password=123456&lala=xixi#dudu

一个完整的Url需要(协议  域名  端口号  请求的资源  get参数  锚点)组成

锚点:可以实现同一个页面跳转

3.请求

请求行、请求头、空行
            常见请求头
               accept:浏览器通过这个头告诉服务器,它所支持的数据类型
          Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
          Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式(重要)
          Accept-Language:浏览器通过这个头告诉服务器,它的语言环境
          Host:浏览器通过这个头告诉服务器,想访问哪台主机
          If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间
          Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的  防盗链(重要)
          Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接

4.响应

状态行、响应头、实体内容
            常见响应头
            Location: 服务器通过这个头,来告诉浏览器跳到哪里
          Server:服务器通过这个头,告诉浏览器服务器的型号
          Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式
          Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度
          Content-Language: 服务器通过这个头,告诉浏览器语言环境
          Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
          Refresh:服务器通过这个头,告诉浏览器定时刷新
          Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式打数据
          Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的
          Expires: -1  控制浏览器不要缓存
          Cache-Control: no-cache  
          Pragma: no-cache


三、抓包工具

sublime安装和使用
    (1)安装插件管理器,packagecontrol
    (2)安装插件
        按:ctrl + shift + p
        输入pci,点击installpackage即可
        搜索想要安装的插件,敲enter即可安装
    (3)卸载插件
        按:ctrl + shift + p
        输入remove,选中remove package即可

    抓包:

        谷歌浏览器自带抓包工具:

network,点击看详情

response.headers  响应头部

request.headers 请求头

query_string  请求字符串,get参数

formadata   请求参数,post参数

response: 响应内容

           fiddler软件(专业抓包软件)

###必须要配置这一步,配置成功才能进行下一步。####

配置:正常步骤:options==》https==》capture https connects==>action==>trust root certificate

###这是windows系统配置方法,Mac、ubuntu配置自行百度。###

配置完毕,重启fiddler即可。

fiddler使用文档

1、配置
2、使用
    左边:所有的请求
        <> : 返回的是html文档
        图片标记:代表是图片
        {json} : 返回json格式
        {css} : css文件
        js: js文件
    右边:查看某个请求的详细信息
        inspectors
        右上:这个请求所有的请求信息
            raw:请求的原始信息
            webforms:请求所带参数,query_string代表get参数,formdata代表post参数
        右下:所有的响应信息
            raw:查看详细的响应信息
            json:如果返回的是json数据,在这里查看
    清除所有请求
        removeall   清除所有请求
        file==》capture  关闭或者启动抓包

    快捷键:
    select html : 所有的html请求
    select js : 所有的js请求
    ?baidu : 选中所有带有baidu的请求
    cls : 清除所有的请求


四、Urllib库

urllib库是干什么的?

    是Python用来模拟http发送请求的,是Python中自带的一个模块。

    python 2.x  : urllib, urllib2

    python 3.x : urllib

    urllib.request : 发送请求、获取响应

   urlopen(url=xxx, data=xxx) : 发送get,直接将参数拼接到url的后面,发送post,就需要data参数了

            urlopen()#打开url

            urlretrieve()#不仅要打开url,还要保存url

import urllib.request

url = 'http://www.baidu.com/'
# 发送请求
 # response = urllib.request.urlopen(url)
read() : 读取的为二进制数据,需要进行转换
 # print(response.read().decode())
 readlines() : 读取为列表格式,按行读取
 # print(response.readlines())
 getcode() : 获取状态码
 # print(response.getcode())
 geturl() : 获取请求的url
 # print(response.geturl())
getheaders() : 返回响应头部,列表里面有元组
 # print(response.getheaders())

response对象:
            read() : 读取的为二进制数据
                    字符串类型《====》二进制类型
                    encode() : 字符串格式转化为二进制格式,不写代表utf8,写gbk就代表gbk
                    decode() : 二进制转为字符串,不写就是utf8,写gbk就是gbk
            readlines() : 读取为列表格式,按行读取
            getcode() : 获取状态码
            geturl() : 获取请求的url

            getheaders() : 返回响应头部,列表里面有元组

# 将响应的内容保存起来, 考虑字符集
# with open('baidu.html', 'w', encoding='utf8') as fp:
# 	fp.write(response.read().decode())

# 不考虑字符集
# with open('baidu1.html', 'wb') as fp:
# 	fp.write(response.read())

# urllib.request.urlretrieve(url=url, filename='./baidu2.html')


    urllib.parse: 用来处理数据


  quote():对Url里面的非法字符进行编码。只能出行字母、数字、下划线、&、://

  unquote():url解码

url = 'http://www.baidu.com/index.html?username=狗蛋&pwd=123'
# url编码
string = urllib.parse.quote(url)
# url解码
lala = urllib.parse.unquote(string)
print(lala)



#####queote与unquote一般是成对出现#######

urlencode():

将其拼接组成起来

url = 'http://www.baidu.com/index.html?'
# get参数
data = {
    'username': '狗蛋',
    'pwd': '123',
    'height': '170'
 }
string = urllib.parse.urlencode(data)

url += string
print(url)


5、构建请求对象
    User-Agent : 客户端浏览器类型
    定制请求头部,将自己伪装成pc浏览器
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
    }
    # 构建请求对象
    request = urllib.request.Request(url=url, headers=headers)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值