python網路爬蟲五
阿新 • • 發佈:2018-11-08
實戰三—向搜尋引擎提交搜尋請求
- 關鍵點:利用搜索引擎提供的介面
- 百度的介面:
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