• Spider-two


    一、网络数据加密:
    1. md5 / sha1 不可逆加密算法: 结果是十六进制数, 结果不可逆, 多用于文件验证
    import hashlib
    md5_obj = hashlib.md5()
    sha1_obj = hashlib.sha1()

    md5_obj.update("非Unicode字符串")
    sha1_obj.update("非Unicode字符串")

    md5_obj.hexdigest()
    sha1_obj.hexdigest()


    2. base64 : 可逆的一种编码方式, 大概样式为: 大小写混合, 斜杠, 最后是等号
    import base64
    b64data = base64.b64encode() # 对字符串 或 文件数据进行编码
    base64.b64decode(b64data) # 对base64数据解码,复原回原本的数据

    3. rsa 非对称加密 /aes 对称加密

    客户端和服务器端数据加密: 公钥和私钥


    4. Unix 时间戳
    表示 从 1970年1月1日到现在的总秒数,通常有两种值:
    10 位: 单位是秒; 13 位 :单位是毫秒。

    秒: int(time.time())
    毫秒: int(time.time() * 1000)

     


    二、Requests模块有两种发送请求的方式:

    # 普通请求发送方式,不会保存Cookie
    requests.get()
    requests.post()


    # 创建一个可以保存Cookie 的 session对象
    ssion = requests.session()
    # 通过session对象发送请求,可以记录并传递Cookie
    ssion.get()
    ssion.post()


    三、爬虫的标准模拟登录流程:

    模拟登录的目的:为了登录成功并保存Cookie,再用于发送其他需要登录后才能访问的页面请求。

    1. 发送登录页面的 get 请求,获取登录参数
    2. 发送登录的 post 请求,提交登录参数 和 账户密码,实施模拟登录(如果登录成功则记录Cookie)
    3. 附带登录的Cookie,发送其他页面的请求,提取需要的数据。

    模拟登录实际开发很少使用(通过Cookie池代理),但是面试会经常问。

    代理: 浏览器插件使用代理时, 会弹窗提示需要提供账号密码, 而代码中若没有提供会提示 407错误(requests默认没有使用代理); 免费代理, 无需账号&密码


    三、HTML DOM 是HTML的树形结果概念。

      HTML

    head    body
    title      a p div br 属性值、文本内容、href、 src
    meta


    lxml/ XPATH

    四、XPATH 提取数据定律:

    1. xpath表达式的匹配结果,一定是一个列表
    匹配成功返回所有数据的列表,没有匹配成功返回空列表

    2. xpath表达式提取的数据(属性值字符串、文本值字符串),结果一定是一个Unicode字符串, 注意网页标签中的双引号 空格
    url_list = xpath("//div[@id='u1']/a/@href")
    text_list = xpath("//div[@id='u1']/a/text()")

    3. 如果没有提取数据,返回所有标签结点的对象(Element对象),该对象可以继续调用xpath向下取值。
    a_list = xpath("//div[@id='u1']/a")

    item_list = []

    for a in a_list:
      item = {}
      item['text'] = a.xpath("./p/text()")[0]
      try:
        item['src'] = a.xpath("./img/@src")[0]
      except:
        item['src'] = None

      item['src'] = a.xpath("./img/@src")[0] if a.xpath("./img/@src") else None

      item_list.append(item)  # [{}, {}, {}, {}]

    栗子: div//a div下的第二个标签, Xpath语法下标从1开始

    xpath : XML Path Language,是一种专门提取xml文档数据的语法。

    html : 网页字符串,字符串本身不支持xpath提取数据,所以需要通过lxml转换

    lxml : 作用是将html字符串,转换为可以调用xpath方法的 对象lxml.ElementTree

    使用xpath取值时, 大型网站会根据不同浏览器返回不同网页内容(依据User-Agent区分), chrome浏览器返回的内容会放在注释中, IE浏览器不会。

     

    # BeautifulSoup4、Pyquery

    # 从lxml类库中,导入 etree模块
    from lxml import etree

    html = requests.get(url).content

    # etree模块有个HTML类,接收网页字符串,并返回一个 DOM 对象
    html_dom = etree.HTML(html)

    # 读取本地文件,并转为 HTML DOM对象
    #html_dom = etree.parse("./baidu.html")

    # 将DOM对象复原回网页字符串
    #html = etree.tostring(html_dom)

    # DOM对象可以调用xpath方法,提取网页的数据
    url_list = html_dom.xpath("//div[@id='u1'][1]/a/@href")

    五、正则

    import re

    re.match() : 从字符串的第一个字符开始匹配,如果匹配成功返回Match对象,该对象可以通过 group()提取数据。如果第一个字符不符合匹配,则返回 None
    re.search():从字符串的第一个字符开始匹配,如果匹配成功返回Match对象,该对象可以通过 group()提取数据。如果第一个字符不符合匹配,继续从第二个开始,直到最后一个字符为止,如果一种没有匹配,则返回 None

    注:match 和 search 都只匹配一次

    re.findall() : 返回字符串里所有符合匹配的结果,如果匹配成功,返回列表;如果不成功,返回空列表

    re.sub("re表达式", "字符串", "替换后的字符") : sub替换字符串指定字符,替换后返回一个新字符
    re.split() : 对字符串按指定字符进行分隔,返回分隔后的列表


    str <-> list

    list = str.split()
    str = "".join(list)

    str.replace()
    str.find()

    re.findall(r"d+", html)
    re.findall(r"d+", html)

    pattern = re.compile(r"d+")
    pattern.findall(html)
    pattern.findall(html)

    r"d+ ":r 忽略Python字符串里的转义字符


    import json

    # 将python对象转为json字符串
    json_str = json.dumps(python_obj)
    # 将json字符串转为python对象
    python_obj = json.loads(json_str)
    # 将python对象转为json字符串 并保存到 文件中
    json.dump(python_obj, open("xxx.json", "w"))
    # 读取文件的json字符串,并转为对应的Python对象
    python_obj = json.load(open("xxx.json", "r"))

     

  • 相关阅读:
    面向对象
    Spring学习(十四)----- Spring Auto Scanning Components —— 自动扫描组件
    Spring学习(十三)-----Spring 表达式语言(Spring EL)
    Spring学习(十二)-----Spring @PostConstruct和@PreDestroy实例
    Spring学习(十二)-----Spring Bean init-method 和 destroy-method实例
    学习计划
    Spring学习(十一)-----Spring使用@Required注解依赖检查
    Spring学习(十)-----Spring依赖检查
    Spring学习(九)-----Spring bean配置继承
    Spring学习(八)-----Spring注入值到集合类型的例子
  • 原文地址:https://www.cnblogs.com/hsmwlyl/p/10630337.html
Copyright © 2020-2023  润新知