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" />\r\n\t\t\t\t\t</form>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="query-hd">ip138.com IP查詢(搜索IP地址的地理位置)</div>\r\n\t\t\t\t<h1 class="query">您查詢的IP:218.106.145.15</h1><p class="result">本站主數據:福建省福州市  聯通</p><p class="result">參考數據一:福建省福州市 聯通</p>\r\n\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class="footer">\r\n\t\t\t<a href="http://www.miitbeian.gov.cn/" rel="nofollow" target="_blank">滬ICP備10013467號-1</a>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<script type="text/javascript" src="/script/common.js"></script></body>\r\n</html>\r\n'
>>> 

  • 給出完整代碼:
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM