一. 基础:

1.开发语言:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

高级(依赖于C语言):Java(执行效率比python高),python(优势:代码开发效率高),PHP(写网站页面,快速搭建,有局限性),

        Java,python:可以写网页,也可以写后台功能

低级:c语言,汇编语言

2.机器码和字节码

机器码:计算机可以直接识别的码

字节码:高级语言规则形成的码

3.python版本很多,javapython,c#python不如cpython执行效率高,一般常用cpython;

      pypy:用cpython开发的python,对python的升级,只需要学习python的规则,执行效率高(速度快),但是不是主流语言,功能还不够完善

4.python的数据类型:

     整型(整数,长度不受限制)

     布尔类型(false,true)

     浮点型(小数)

     e记法(特变大或特别小的数:1.5e4=15000)

  类型转换:整数:int()    字符串:str()      浮点数:float()

  注意:浮点型转换为整数型采取截断法,如a=int(5.99),则a=5;

 5.可以实现爬虫的语言

  php:多线程支持不好

  java:代码臃肿,重构成本大

  c,c++:能力的体现,不是最好的选择

  python:支持的模块多,有非常强大的框架

6.几个概念

通用爬虫:百度,360,搜狐,谷歌。。。

       原理:抓取网页----采集数据----数据处理----提供检索服务

       通用爬虫如何抓取新网站:

        (1)主动提交url

          (2)设置友情链接

        (3)百度会和DNS服务商合作,抓取新网站

       (4)检索排名:按照竞价排名,根据pagerank值,点击量,访问量排名

      不想让百度爬取:编写robots协议

          例如:淘宝的robots协议:http://www.taobao.com/robots.txt   显示可以爬取的内容

聚焦爬虫:根据特定的需求抓取指定的数据

      原理:网页的特点:都有自己唯一的url,网页内容都是html结构,使用的都是http,https协议

         给一个url----写程序,模拟浏览器访问url(需要用到库)----解析内容,提取数据(正则表达式,bs4,xpath,jsonpath)

7.环境:Windows,Linux

8.协议:双方规定的传输形式,属于应用层协议

       客户端发送请求,服务端与数据库(mysql,redis,mongode)进行交互,响应内容

       http端口号:80,https端口号:443  两者区别和原理:

                https://blog.csdn.net/xionghuixionghui/article/details/68569282   

                https://juejin.im/entry/58d7635e5c497d0057fae036

9.http协议详解:http://www.cnblogs.com/10158wsj/p/6762848.html

          url只能由特定的字符组成:字母,数字,下划线;如果出现空格,中文等,就要对其进行编码

10.抓包:fiddler

11.urllib库:模拟浏览器发送请求的库,python自带

        字符串和二进制之间的转换:encode()    字符串----->  二进制

                                                     decode()  二进制------>  字符串

        如果小括号里不写参数,默认是utf8,如果写,就写gbk(根据网页的编码是什么类型:右键----查看网页源代码)

        urllib.request: (举例1)

              urlopen(url)      向url发送请求(举例1.方法1)

              urlretrieve(url,image_path)    向url发送请求,直接写入(举例1.方法2)

        urllib.parse:

              quote(url)    将非法的url(含有中文字符)进行编码    (举例2)

              unquote(url)    将编码过的url进行解码

              urlencode(字典data)   给一个字典,将字典拼接为query_string,并将进行编码   (举例3)

        response: (举例4)

              read()    读取响应内容,是字节类型(二进制类型)

              geturl()     获取请求url

              getheaders()    获取头部信息

             getcode()     获取状态码

             readlines()    按行读取,返回类型都是字节类型

     

        举例1:下载图片:只能写入本地二进制的格式

              方法1:

 import urllib.request
 image_url='http://hellorfimg.zcool.cn/preview/179504174.jpg'
 response=urllib.request.urlopen(image_url)    
 with open('1.jpg','wb') as fp:
     fp.write(response.read())

             方法2:

import urllib.request
image_url='http://hellorfimg.zcool.cn/preview/179504174.jpg'
urllib.request.urlretrieve(image_url,'2.jpg')    #直接写入

         举例2:

 import urllib.parse
 image_url='http://hellorfimg.zcool.cn/preview/图片.jpg'
 ret=urllib.parse.quote(image_url)   #将非法的url编码
 print(ret)
 re=urllib.parse.unquote(ret)      #将编码后的url解码
 print(re)

         举例3: 

         不用urlencode的拼接方法

 import urllib.parse
 url='http://wwww.baidu.com/index.html?参数1=1&参数2=2&参数3=3'
参数1='1'
 参数2='2'
 参数3='3'
 
 data={
     '参数1':参数1,
     '参数2':参数2,
      '参数3':参数3,
 }    #字典
 
 #遍历字典
 lt=[]
 for k,v in data.items():
     lt.append(k+'='+str(v))
 query_string='&'.join(lt)
 url=url+'?'+query_string
 print(url)

           用urlencode的拼接方法:

 import urllib.parse
 url='http://wwww.baidu.com/index.html'
 参数1='1'
 参数2='2'
 参数3='3'
 
 data={
     '参数1':参数1,
     '参数2':参数2,
     '参数3':参数3,
 }    #字典
 
 query_string=urllib.parse.urlencode(data)
 print(query_string)
 url=url+'?'+query_string
 print(url)

         举例4:

  import urllib.request
  
  url='http://www.baidu.com'
  
  response=urllib.request.urlopen(url)     #向url发送请求,相应是返回值的形式
 
  print(response.read().decode())   #获取响应,将二进制转化为字符串
  with open('baidu.html','w',encoding='utf8') as fp: fp.write(response.read().decode()) #写入baidu.html print(response.geturl()) #获取请求url

    12.get方式

import urllib.parse
import urllib.request

word=input('请输入想要搜索的内容:')
url='http://www.baidu.com/s?'

#参数
data={
    'wd':word,   #输入的内容
    'tn':'25017023_13_pg',
    'ssl_s':'1',
    'ssl_c':'16a401eba80',
}    #在百度搜索一个内容之后得到
query_string=urllib.parse.urlencode(data)
url=url+query_string

#发送请求
response=urllib.request.urlopen(url)
with open('baidu2.html','wb') as fp:
    fp.write(response.read())

 

13.构建请求头部信息(反爬第一步)

          python向浏览器发送请求,浏览器检测到头部信息为:python-urllib/3.6  , 如果有反爬虫,则无法爬取,因为浏览器根据检测到的头部信息判定这是爬虫程序,会禁止爬取数据;这时,python-urllib/3.6  需要伪装自己的UA,让服务端认为是浏览器在上网

        UA大全:https://blog.csdn.net/rookie_is_me/article/details/81634048

        伪装UA:构建请求对象:urllib.request.Request(url=url,headers=headers)  (通过这个类创建一个请求对象)

import urllib.parse
import urllib.request
import ssl
url='http://www.baidu.com/'

#伪装头部
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
}    
#构建请求对象
request=urllib.request.Request(url=url,headers=headers)
#发送请求
response=urllib.request.urlopen(request)
with open('baidu3.html','wb') as fp:
    fp.write(response.read())

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄