1. 程式人生 > >網絡爬蟲的盜之有道

網絡爬蟲的盜之有道

玩轉 res tro import last -type code 結果 網站


‘‘‘
一 爬蟲網絡的尺寸:
1 小規模,數據量小,爬取速度不敏感;利用Request庫爬取網頁和玩轉網頁
2 中規模:數據規模較大,爬取速度敏感;可以利用scrapy庫爬取網站或者爬取系列網站
3 大規模,搜索引擎爬取速度關鍵,主要是通過定制開發,而不是某一個庫就可以完成的,可以用於爬取全網
二 爬蟲網絡的騷擾:
受限於編寫水平和目的,網絡爬蟲將會為web服務器帶來巨大的資源開銷

三 網絡爬蟲具有的風險:
網絡爬蟲的法律風險 :
1 服務器上的數據有產權歸屬
2 網絡爬蟲獲取數據後牟利將帶來法律風險
網絡爬蟲泄漏隱私
網絡爬蟲可能具備突破簡單訪問控制的能力,獲得被保護數據從而泄漏個人隱私。

爬蟲網絡的限制:
來源審查:判斷user-agent進行限制,檢查來訪HTTP協議頭的User-Agent域,
只響應瀏覽器或友好爬蟲的訪問。
發布公告:Robots協議:告知所有的爬蟲網站的爬取策略,要求爬蟲遵守。

Robots協議的使用:
網絡爬蟲:自動或人工識別robots.txt,再進行內容爬取
約束性:robots協議是建議但非約束性,網絡爬蟲可以不遵守,但存在法律風險。
‘‘‘
#爬取京東某件商品的信息
import requests
url = "https://item.jd.com/2967929.html"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_endcoding
print (r.text)
except:
print("crawl fail")
print r.status_code
print r.headers
#輸出結果為:
#>>> crawl fail
#>>> 200
#>>> {‘Via‘: ‘BJ-H-NX-110(HIT), http/1.1 GZ-CM-1-JCS-116 ( [cSsSfU])‘, ‘ser‘: ‘3.85‘, ‘Content-Encoding‘: ‘gzip‘, ‘Transfer-Encoding‘: ‘chunked‘, ‘Age‘: ‘0‘, ‘Expires‘: ‘Sat, 09 Sep 2017 01:47:54 GMT‘, ‘Vary‘: ‘Accept-Encoding‘, ‘hh‘: ‘1-1‘, ‘Server‘: ‘JDWS/2.0‘, ‘Last-Modified‘: ‘Sat, 09 Sep 2017 01:46:55 GMT‘, ‘Connection‘: ‘keep-alive‘, ‘Cache-Control‘: ‘max-age=60‘, ‘Date‘: ‘Sat, 09 Sep 2017 01:46:54 GMT‘, ‘Content-Type‘: ‘text/html; charset=gbk‘}


#通過百度的關鍵詞搜索
import requests
keyword="Python"
try:
kv={"wd":keyword}
r = requests.get("http://www.baidu.com/s",params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print "crawl fail"
#輸出結果為:
#>>>http://www.baidu.com/s?wd=Python
#>>>353592

import requests
import os
url = "http://image.nationalgeographic.com.cn/2017/0211/20170211061910157.jpg"
root ="E://beifeng//"
path=root+url.split(‘/‘)[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path,‘wb‘) as f:
f.write(r.content)
f.close()
print ("文件保存成功")
else:
print("文件已存在")
except:
print("crawl fail")
#輸出內容為:
#>>> 文件保存成功

網絡爬蟲的盜之有道