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

  • 相关阅读:
    公用表表达式(CTE)的递归调用
    c# 如何让tooltip显示文字换行
    实战 SQL Server 2008 数据库误删除数据的恢复
    SQL SERVER数据库中 是否可以对视图进行修改删除
    asp.net中实现文件批量上传
    sql server 2008学习2 文件和文件组
    sql server 2008学习3 表组织和索引组织
    sql server 2008学习4 设计索引的建议
    sql server 2008学习10 存储过程
    .net 调用 sql server 自定义函数,并输出返回值
  • 原文地址:https://www.cnblogs.com/031602523liu/p/9824799.html
Copyright © 2011-2022 走看看