用python爬取百度的搜索结果

252 阅读2分钟

对于一些初学爬虫的小伙伴来说,实践是最快把理论知识用于真实过程的方法。那我们今天就简单的为大家展示一下python实践项目的过程,本次爬取目标是,百度搜索结果数据。以搜索”马哥python说“为例:分别爬取每条结果的页码、标题、百度链接、真实链接、简介、网站名称。

首先是编写代码的过程,这个是比较简单的,稍微有点难度的是在实际获取数据的过程中遇到的问题,比如基本的每个网站都有反爬机制,并且严格程序不同,所以在获取数据之前需要对网站进行分析,最主要的是掌握它的反爬机制。比如会遇到封cookie,限制请求头,封IP等。其中Cookie是个关键,如果不加Cookie,响应码可能不是200,获取不到数据,而且Cookie值是有有效期的,需要定期更换,如果发现返回无数据或响应码非200,尝试替换最新的Cookie,还有就是添加代理IP也是重点,因为很多网站都限制了IP的访问速度和次数,如果大量获取数据,没有大量IP进行更换那肯定不行的。接下来我们就在实际实现过程中展示下代理IP的使用,实现代码如下:

#! -*- encoding:utf-8 -*-

    import requests
    import random

    # 要访问的目标页面
    targetUrl = "http://httpbin.org/ip"

    # 要访问的目标HTTPS页面
    # targetUrl = "https://httpbin.org/ip"

    # 代理服务器(产品官网 www.16yun.cn)
    proxyHost = "t.16yun.cn"
    proxyPort = "31111"

    # 代理验证信息
    proxyUser = "username"
    proxyPass = "password"

    proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
        "host" : proxyHost,
        "port" : proxyPort,
        "user" : proxyUser,
        "pass" : proxyPass,
    }

    # 设置 http和https访问都是用HTTP代理
    proxies = {
        "http"  : proxyMeta,
        "https" : proxyMeta,
    }


    #  设置IP切换头
    tunnel = random.randint(1,10000)
    headers = {"Proxy-Tunnel": str(tunnel)}



    resp = requests.get(targetUrl, proxies=proxies, headers=headers)

    print resp.status_code
    print resp.text

示例中使用的是隧道IP,大家做爬虫的都应该不陌生,网上也有很多代理商都提供了隧道IP,不知道怎么选择可以直接试试亿牛云代理,专门有提供使用示例,对新手来说非常友好,代理质量也很好,有专门的技术支持,服务也很好。

若有收获,就点个赞吧