爬虫入门-爬取有道在线翻译结果(2)
生活随笔
收集整理的這篇文章主要介紹了
爬虫入门-爬取有道在线翻译结果(2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于服務器會識別訪問的對象是否為代碼并加以限制,所以需要加上一定的措施隱藏代碼身份。以上節有道為例:
1、添加headers信息:
在生成request對象時添加headers信息中的User-Agent屬性信息,模仿網頁端用戶。
注意有兩種方法,header信息要么在request對象生成前給出,要么在生成之后用add_header()函數添加上去
import urllib.request import urllib.parsecontent=input('請輸入需要翻譯的內容:') url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'} data={'i': content, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': '1522597233542', 'sign': '520f9eb5cefff7d528e25e43a47bc2e7', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_CLICKBUTTION', 'typoResult': 'false' } data=urllib.parse.urlencode(data).encode('utf-8')#python本身字符串是unicode,需要轉換為網頁默認的utf-8 req=urllib.request.Request(url,data,header)#使用給定header信息,增強隱藏效果(欺騙服務器為個人用戶) ''' req.add_header('User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36') header信息要么在request對象生成前給出,要么在生成之后用add_header()函數添加上去 ''' response=urllib.request.urlopen(req) html=response.read().decode('utf-8')#實際上是個json結構,網頁本身是utf-8,需要轉換為python的unicode#json的運用:輕量級數據交換 import json target=json.loads(html)#轉換成字典格式 print('翻譯結果:%s' % target['translateResult'][0][0]['tgt'])但往往當訪問頻率過高時,服務器就不再關注header信息,而有可能直接要求輸入驗證碼,防止非個人用戶訪問,這里有以下兩種應對辦法:
2.增加延遲:
人工強行降低訪問頻次,使用time.sleep()函數,簡單但是效率低
import urllib.request import urllib.parsewhile True:content=input('請輸入需要翻譯的內容(輸入字母q退出程序):')if content=='q':breakurl='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}data={'i': content,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': '1522597233542','sign': '520f9eb5cefff7d528e25e43a47bc2e7','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_CLICKBUTTION','typoResult': 'false'}data=urllib.parse.urlencode(data).encode('utf-8')#python本身字符串是unicode,需要轉換為網頁默認的utf-8req=urllib.request.Request(url,data,header)#使用給定header信息,增強隱藏效果(欺騙服務器為個人用戶)'''req.add_header('User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36')header信息要么在request對象生成前給出,要么在生成之后用add_header()函數添加上去'''response=urllib.request.urlopen(req)html=response.read().decode('utf-8')#實際上是個json結構,網頁本身是utf-8,需要轉換為python的unicode#json的運用:輕量級數據交換import jsontarget=json.loads(html)#轉換成字典格式print('翻譯結果:%s' % target['translateResult'][0][0]['tgt'])time.sleep(5)#延遲5秒再響應,防止服務器攔截爬蟲3.設置代理
1)參數是一個字典
2)定制、創建一個opener
3)安裝調用opener
注意:在opener里添加headers信息時,注意是個list
***百度搜出來的很多地址都不可用,推薦測試ip地址網站 https://www.kuaidaili.com/free/intr/
import urllib.requesturl='http://www.whatismyip.com.tw'proxy_support=urllib.request.ProxyHandler({'http':'119.90.126.106:7777'})#1)參數是一個字典 opener=urllib.request.build_opener(proxy_support)#2)定制、創建一個opener opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36')] #添加headers信息,避免反爬蟲,注意:這里不是字典,而是一個list urllib.request.install_opener(opener)#3)安裝opener response = urllib.request.urlopen(url) #4)調用opener html=response.read().decode('utf-8') print(html)輸出結果如下:
<!DOCTYPE HTML> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="description" content="查我的IP,查IP國家,查代理IP及真實IP"/> <meta name="keywords" content="查ip,ip查詢,查我的ip,我的ip位址,我的ip位置,我的ip國家,偵測我的ip,查詢我的ip,查看我的ip,顯示我的ip,what is my IP,whatismyip,my IP address,my IP proxy"/> <link rel="icon" href="data:;base64,iVBORw0KGgo="> <title>我的IP位址查詢</title></head><body> <h1>IP位址</h1> <span data-ip='119.90.126.106'><b style='font-size: 1.5em;'>119.90.126.106</b></span> <span data-ip-country='CN'><i>CN</i></span><h1>真實IP</h1> <span data-ip-real='*.*.*.*'><b style='font-size: 1.5em;'>*.*.*.*</b></span> <span data-ip-real-country='CN'><i>CN</i></span><script type="application/json" id="ip-json"> { "ip": "119.90.126.106", "ip-country": "CN", "ip-real": "*.*.*.*", "ip-real-country": "CN" } </script><script type="text/javascript"> var sc_project=6392240; var sc_invisible=1; var sc_security="65d86b9d"; var sc_https=1; var sc_remove_link=1; var scJsHost = (("https:" == document.location.protocol) ? "https://secure." : "http://www.");var _scjs = document.createElement("script"); _scjs.async = true; _scjs.type = "text/javascript"; _scjs.src = scJsHost + "statcounter.com/counter/counter.js"; var _scnode = document.getElementsByTagName("script")[0]; _scnode.parentNode.insertBefore(_scjs, _scnode); </script> <noscript><div class="statcounter"><img class="statcounter" src="http://c.statcounter.com/6392240/0/65d86b9d/1/" alt="statcounter"></div></noscript></body> </html>總結
以上是生活随笔為你收集整理的爬虫入门-爬取有道在线翻译结果(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java循环输出abcd_java 输
- 下一篇: excel数据转换成对应公式