• 。。。


    一. 基本介绍

    什么是爬虫?
        - 就是抓取网页数据的程序
    
    怎么抓取网页数据
    
    
    网页三大特征:
        - 每个网页都有自己的URL (统一资源定位符) 来进行定位
        - 网页都是用HTML(超文本标记语言)来描述页面信息
        - 网页都使用HTTP/HTTPS(超文本传输协议)来传输HTML数据
    
    爬虫的设计思路:
        -1. 首先确定需要爬取的网页URL地址
        -2. 通过HTTP/HTTPS协议来获取对应的HTML页面
        -3. 提取HTML页面里面有用的数据
            a. 如果是需要的数据,就保存起来。
            b. 如果是页面里的其它URL,那就继续执行第二步。
    
    为什么选择Python做爬虫?
        - PHP   对多线程 异步支持不够好 并发处理很弱
        - Java  Python爬虫的最大对手,但是Java语言本身很笨重,代码量很大,重构成本比较高
        - C/C++ 运行效率几乎最强,但是学习成本很高,代码成型比较慢
        - Python 语言优美,代码简洁,开发效率高,支持的模块多,相关的HTTP请求模块和
                 还有强大的爬虫Scrapy 以及成熟高效的scrapy-redis分布式策略
                 而且 调用其他接口也非常方便(胶水语言)
    View Code

    a. 反爬虫 设置多个浏览器

    import urllib.request
    import random
    
    user_list = [
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
            "Mozilla/5.0 (Windows NT 6.1; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
            "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
            "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
    ]
    
    # 在User-Agent列表里随机选择一个User-Agent
    user_agent = random.choice(user_list)
    
    # 通过urllib.request.Request() 方法构造一个请求对象
    request = urllib.request.Request("http://www.baidu.com/")
    
    # add_header()方法 添加/修改 一个HTTP报头
    request.add_header("User-Agent", user_agent)
    
    # get_header() 获取一个已有的HTTP报头的值,注意只能是第一个字母大写,其他的必须小写
    print(request.get_header("User-agent"))
    View Code

    b. 用户输入(url 解码) 百度查找

    import urllib.request
    from urllib import parse
    
    url = "http://www.baidu.com/s"
    headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1"}
    
    keyword = input("请输入你要查询的字符串: ")
    
    wd = {"wd":keyword}
    wd = parse.urlencode(wd)
    
    # 拼接完整的url
    fullurl = url + "?" + wd
    
    # 构造请求对象
    request = urllib.request.Request(fullurl,headers=headers)
    
    # 发送请求
    response = urllib.request.urlopen(request)
    
    print(response.read())
    View Code

    c. Handler处理器 和自定义Opener

    import urllib.request
    from urllib import parse
    
    # 构建一个HTTPHandler处理器对象,支持处理HTTP的请求
    http_hander = urllib.request.HTTPHandler()
    
    # 调用build_opener() 方法构建一个自定义的opener对象, 参数是构建的处理器对象
    opener = urllib.request.build_opener(http_hander)
    
    request = urllib.request.Request("http://www.baidu.com")
    response = opener.open(request)
    print(response.read())
    View Code

     

  • 相关阅读:
    闲来无事研究研究.Net中的异步编程
    Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理
    c# 连接Redis报错:WRONGTYPE Operation against a key holding the wrong kind of value:类型搞混弄出的错误
    VS2013 调试时出现“表达式计算器中发生内部错误”的问题解决办法
    WCF优化的几个常规思路
    UWP汉堡菜单
    C#注册系统全局快捷键
    CXF详细介绍
    hadoop默认3个核心配置文件说明
    在虚拟机配置hive
  • 原文地址:https://www.cnblogs.com/golangav/p/7436342.html
Copyright © 2020-2023  润新知