7.模擬瀏覽器訪問,隱藏python自身資訊
原理:當瀏覽器訪問伺服器上的內容時,伺服器會抓取訪問資訊中header中的user-agent資訊,若user-agent中顯示有python資訊等,則視為爬蟲程式, 此時伺服器會阻止它進行資訊爬取。為了隱藏爬蟲程式,此時使用模擬瀏覽器訪問的方式來進行資訊獲取,模擬瀏覽器方法是新增瀏覽器的user-agent,目前有兩種方法新增。
第一種:先定義head,通過瀏覽器訪問某個**,找到其headers的user-agent的值,在urlopen引數中新增head值即可。
**如下:
head= {}
req = urllib.request.request(url,data,head)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
第二種,不用先定義head,而是定義urllib.request物件後,在其後新增add_header即可。
**如下:
req = urllib.request.request(url,data)
修改有道翻譯的例子,進行隱藏訪問。
注意:示例中採用的第二種進行隱藏
選擇第二種隱藏的原因,無需先定義head,直接在requset物件中新增add_header,更加簡潔。
**如下
import urllib.request
import urllib.parse
import json
content = input("請輸入需要翻譯的內容:")
url =''
data = {}
data['i'] = content
data['from'] = 'auto'
data['to'] = 'auto'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = '1507902676814'
data['sign'] ='f4bd4b3b948cbc76c913eafdd1853ed8'
data['doctype'] = 'json'
data['version']= '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'fy_by_clickbuttion'
data['typoresult'] = 'true'
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.request(url,data)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
target = json.loads(html)
print('翻譯結果:%s' %(target['translateresult'][0][0]['tgt']))
8.使用**(agent)進行資訊爬取
若爬蟲訪問頻率過高,則伺服器會遮蔽爬蟲,一般有兩種方法,
其一是延遲訪問瀏覽器,
其二是使用**。
one:使用延遲
import urllib.request
import urllib.parse
import json
import time
while(true):
content = input("請輸入需要翻譯的內容(輸入『q!』退出):")
if content == q!:
break;
url =''
data = {}
data['i'] = content
data['from'] = 'auto'
data['to'] = 'auto'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = '1507902676814'
data['sign'] = 'f4bd4b3b948cbc76c913eafdd1853ed8'
data['doctype'] = 'json'
data['version']= '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'fy_by_clickbuttion'
data['typoresult'] = 'true'
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.request(url,data)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
target = json.loads(html)
print('翻譯結果:%s' % (target['translateresult'][0][0]['tgt']))
time.sleep(5) # 等待5s
two:使用**
步驟:
第一步:引數為乙個字典
proxy_support = urllib.request.proxyhandler({})
第二步:定製、建立乙個opener
opener = urllib.request.build_opener(proxy_support)
第三步:安裝opener
urllib.request.install_opener(opener)
呼叫opener
opener.open(url)
示例:
import urllib.request
import random
url = '' # 檢視ip位址資訊
iplist =['118.114.77.47:8080','111.200.58.94:80'] # **ip list
proxy_support =urllib.request.proxyhandler()
opener =urllib.request.build_opener(proxy_support)
# 定製header資訊
urllib.request.install_opener(opener)
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
print(html)
乙隻爬蟲帶你看世界 7
11.正規表示式特殊符號及用法 正規表示式特殊符號主要有兩部分構成,其一是元字元,其二是由 加上字母構成的。元字元 舉個栗子 re.search r fish c d fishc sre.sre matchobject span 0,match fishc re.search r fish c d ...
乙隻爬蟲的產生
以下環境基於py2.7 爬蟲架構 url管理器 處理待爬url以及爬過的url,防止重複抓取以及死迴圈 網頁解析器 解析出想要的資料,以及捕捉新的url位址交給url管理器進行處理繼續抓取。過濾資料,拿到有價值的資料進行處理。資料的存放 python 的 set集合 可以防止資料的重複 需要長期儲存...
乙隻R語言de爬蟲
該爬蟲爬取得是某地新聞內容 pa1 用於找到href鏈結 pa2 用於根據鏈結找到新聞內容 pa3 用於儲存進資料庫 嘿嘿 爬蟲pa1 library xml 引入xml包 givehref function rootnode givenames function rootnode getpage ...