zoukankan      html  css  js  c++  java
  • python爬虫调用搜索引擎及图片爬取实战

    实战三—向搜索引擎提交搜索请求


    • 关键点:利用搜索引擎提供的接口

    image

    • 百度的接口:wd=“要搜索的内容”
    • 360的接口:q=“要搜索的内容”
    • 所以我们只要把我们提交给服务器的url修改成对应的格式,就可以向搜索引擎提交关键字
    • 修改url,第一个想到的就是params参数。只须构造键值对,提交给params即可
    • 键值对前面的代表搜索引擎前面的接口标识,键值对后面的代表我们要搜索的内容。
    >>> import requests
    >>> kv = {'wd':'python'}
    >>> r = requests.get("http://www.baidu.com/s",params=kv)
    >>> r.status_code
    200
    
    • response对象中的request对象来查看我们提交给服务器的URL链接
    >>> r.request.url
    'http://www.baidu.com/s?wd=python'
    
    • 给出完整代码:
    import requests
    kv = {'wd':'python'}
    url = "http://www.baidu.com/s"
    
    try:
        r = requests.get(url,params = kv)
        print(r.request.url)
        r.raise_for_status()
        print(r.text[:2000])
    except:
        print("爬取失败")
    
    

    实战四—图片的爬取和存储


    • 图片链接的格式,url+xxxx.jpg
    • 给出图片的地址,爬取下来后存放到本机的某一个位置。
    >>> import requests
    >>> path = "/Users/hyliu/Desktop/picture.jpg"
    >>> url = "https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=3acf58502f7f9e2f6438155a7e598241/7aec54e736d12f2e227c44d647c2d5628535680f.jpg"
    >>> r = requests.get(url)
    >>> r.status_code
    200
    
    • 现在r中已经包含了我们想要的图片,接下来要做的事情就是把图片变成文件存放到本机。
    • 我们知道图片是一个二进制格式,用如下代码来实现:
    >>> path = "/Users/hyliu/Desktop/picture.jpg"
    >>> with open(path,'wb') as f:
    	f.write(r.content)
    
    53658
    >>> 
    
    • 这段代码的含义就是,我们先打开一个文件picture.jpg,并定义为一个文件标识符f。然后我们将返回的内容写入到这个文件中。
    • r.content表示返回内容的二进制格式,所以我们将r.content写入到图片文件中。
    • 最后我们将文件关闭
    >>> f.close()
    >>> 
    
    • 现在我们去查看我们爬取的结果(是不是很帅!)

    • 给出完成代码(用图片原本的名称来命名):
    import requests
    import os
    
    url = "https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=3acf58502f7f9e2f6438155a7e598241/7aec54e736d12f2e227c44d647c2d5628535680f.jpg"
    root = "/Users/hyliu/Desktop/"
    path = root + url.split('/')[-1] #获取URL最后一个“/”后的内容,实际上就是获取图片原本的名字
    try:
        if not os.path.exists(root):    #目录不存在则创建
            os.mkdir(root)
        if not os.path.exists(path):    #判断是否存在重名文件
            r = requests.get(url)
            #print(r.status_code)
            r.raise_for_status()
            with open (path,'wb') as f:
                f.write(r.content)
                f.close()
                print("文件保存成功!")
        else:
            print("文件已存在")
    except:
        print("爬取失败")
    
    

    实战五—查询IP地址的归属地


    • 借助IP138网站查询:

    • 思路就是像百度和360那样,找到IP138网站的接口信息。

    >>> import requests
    >>> url = "http://m.ip138.com/ip.asp"
    >>> kv = {'ip':'218.106.145.15'}
    >>> r = requests.get(url,params = kv)
    >>> r.status_code
    200
    >>> r.text[-500:]
    'submit" value="查询" class="form-btn" />
    					</form>
    				</div>
    				<div class="query-hd">ip138.com IP查询(搜索IP地址的地理位置)</div>
    				<h1 class="query">您查询的IP:218.106.145.15</h1><p class="result">本站主数据:福建省福州市  联通</p><p class="result">参考数据一:福建省福州市 联通</p>
    
    			</div>
    		</div>
    
    		<div class="footer">
    			<a href="http://www.miitbeian.gov.cn/" rel="nofollow" target="_blank">沪ICP备10013467号-1</a>
    		</div>
    	</div>
    
    	<script type="text/javascript" src="/script/common.js"></script></body>
    </html>
    '
    >>> 
    
    
    • 给出完整代码:
    import requests
    kv = {'ip':'218.106.145.15'}
    url = "http://m.ip138.com/ip.asp"
    try:
        r = requests.get(url,params = kv)
        r.raise_for_status()
        print(r.text[-500:])
    except:
        print("爬取失败")
    
    

    URL is API

  • 相关阅读:
    第一次团队作业——团队展示
    TAC队--团队选题报告
    TAC 坦克队
    Leetcode题库——16.最接近的三数之和
    Leetcode题库——11.盛最多水的容器
    Leetcode题库——23.合并k个排序链表
    Leetcode题库——4.寻找两个有序数组的中位数
    Leetcode题库——15.三数之和
    Leetcode题库——12.整数转罗马数字
    Leetcode题库——19.删除链表的倒数第 n 个节点【##】
  • 原文地址:https://www.cnblogs.com/031602523liu/p/9824799.html
Copyright © 2011-2022 走看看