美文网首页000python
从零起步系统入门Python爬虫工程师(一)-慕课实战

从零起步系统入门Python爬虫工程师(一)-慕课实战

作者: 文艺的程序狗 | 来源:发表于2020-03-20 15:02 被阅读0次

    环境搭建

    1. ide: pycharm
    2. 数据库:mysql
    3. 数据库可视化ide:navicat
    4. 虚拟环境(可以支持不同python版本):virtualenvwrapper
    mkdir virtualenvs
    pip3.6 install virtualenvwrapper
    vim ~/.bash_profile
    #.bash_profile
    export WORKON_HOME='/Users/tangminglong/virtualenvs'
     export VIRTUALENVWRAPPER_PYTHON='/usr/local/bin/python3.7'
     
    source /usr/local/bin/virtualenvwrapper.sh
    创建虚拟环境
    mkvirtualenv (-p python路径) test 可以指定python版本
    列出所有虚拟环境
    workon 
    #进入虚拟环境
     workon test
    #退出
    deactivate
    目前虚拟环境存放的目录是~/virtualenvs
    #删除虚拟环境
    删除目录及可以了
    #安装依赖 
    在对应的虚拟环境下 pip install requests
    

    爬虫作用

    1. 采集网站数据
    2. 自动化测试
    3. 灰色产业

    学习爬虫需要知识

    1. 计算机网络(http/https tcp/ip socket)
    2. 前端知识
    3. 正则表达式
    4. 数据存储(分布式存储)
    5. 并发处理(多进程、多线程、线程池、协程)
    6. 图像识别(处理反爬、验证码) 机器学习算法(验证码、数据解析)

    解决问题

    1. 爬虫的采集和更新策略
    2. 数据解析
    3. 数据存储
    4. 模拟登录(验证码识别)
    5. 爬虫的监控和部署
    6. 解决反爬
    7. 数据去重(url去重 内容去重)

    基础知识

    1. 网络
      • 七层协议:应用层、表示层、会话层、传输层、网络层、 数据链路层、物理层
      • 五层协议:应用层(http https ftp dns pop3)、传输层、网络层(tcp ip IGMP)、数据链路层 (ARP RARP 交换机)、物理层(双绞线、集线器)
    • socket聊天
    • socket多人聊天
    • socket模拟http
    • http协议(换行 传输的数据)
    1. 前端
    requests库(github)
    encoding 编码(自动识别)
    json 转为json
    
    1. 正则表达式
    # .匹配任意字符
    # ^ 以某个字符开始
    # $ 以某个字符结束
    # * 某个字符零到多次(匹配最长)
    # + 一到多次
    # ? 0到1次
    # {m,n} m到n次
    # [] 括号里面只要出现一个都可以(中括号里面的短横线-,表示区间 ) [a-z]
    # \s 空格换行 \S
    # \d 匹配一个数字 \D
    # \w 字母数字下划线 \W
    # \b 单词开始或者结束位置的空字符串 \B
    # | 或
    # \\ 转移字符
    .*匹配最长 贪婪匹配
    .*?取消贪婪匹配
    分组 :()
    eg info="姓名:tmlong 生日:1987年10月11日 本科2016年9月1日"
    result = re.match('.*生日.*?(\d{4})',info)     1987
    match从字符串开始找 search不是
    ps:match 匹配一行 如果换行就匹配不到 re.DOTALL
    
    1. 元素筛选
    • BeautifulSoup
    from bs4 import BeautifulSoup
    html =‘<html>aads</html>’
    bs = BeautifulSoup(html,’html.parser’)
    bs.find(‘div’)
    div_tag = bs.find(‘div’,id="info”) 选择所有id为info的div
    children = div_tag.contents 提取所有子元素 descendant遍历
    next_siblings(是否加s)兄弟节点 previous_siblings
    div_tag.get(“class”) 获取属性
    
    • Scrapy Selector Xpath
    //div[@lang] 所有拥有属性为lang的div
    //div[@lang=‘eng] 所有拥有属性lang等于eng的div
    /div/div[last()] div 下面的div数组的最后一个
    /div/* 选取div下的所有子节点
    //div/div[contains(@class,'hello’)]
    import scrapy from Selector
    sel = Selector(text=html)
    girl_friend_name_class=“/html/body/div[1]/p/@class”
    sel.xpath(girl_friend_name_class).extract()
    more_than_class1 = "//div/div[contains(@class,'hello')]”
    
    ps
    浏览器源码选择元素 右键 可以提取表达式
    contains  内置了很多方法
    
    • Css选择器
    div > p 获取div下的第一个p元素
    div p 获取div下所有p元素
    #name 获取id为name
    .name  获取class为name
    ul + p 获取ul下第一个p元素
    ul ~ p ul所有相邻的p元素
    a[hrep=‘https://baidu.com'] 获取href等于‘https://baidu.com的a元素
    href$ href^ href*
    import scrapy from Selector
     sel = Selector(text=html)
    name_tag = sel.css(".name1 > p::text").extract()[0]
    

    相关文章

      网友评论

        本文标题:从零起步系统入门Python爬虫工程师(一)-慕课实战

        本文链接:https://www.haomeiwen.com/subject/koyjyhtx.html