1.爬取58同城租房網遇到的坑:我爬了一頁數據被封了ip,此時的我是非常的不爽,才十幾條數據就封我,於是我就想着一定得找ip代理來解決這個問題,后面就寫了個ip代理去弄,另外把之前頭部信息ua改成了ua池,然后再爬取58同城,瞬間爬到了數據。頭部信息如下:
from fake_useragent import UserAgent import random # ua = UserAgent(use_cache_server=False) ua =UserAgent() hd ={ "User-Agent":ua.random }
爬取58成功搞定
2.爬取大眾點評景點名稱時遇到的坑:首先headers一定得加上,注意:refer很重要,一定得寫對。另外的話加不加代理其實都沒啥影響,只需要每次獲取cookie就可以了。
頭部信息headers如下:
hd_xq = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36', 'Cookie':'s_ViewType=10; _hc.v=75fb4106-ab4f-b6a4-2415-b2aa30583f05.1524064271; _lxsdk_cuid=162d94f3c0ec8-0ed6c642bd8a38-b353461-100200-162d94f3c0fc8; _lxsdk=162d94f3c0ec8-0ed6c642bd8a38-b353461-100200-162d94f3c0fc8; _lxsdk_s=162d94f3c10-dc5-32f-fc3%7C%7C155', 'Referer':'http://www.dianping.com/shenzhen/ch35/g33831', 'Connection':'keep-alive' }
獲取cookie的方法:
def get_cookies(): from urllib import request from http import cookiejar #聲明一個CookieJar對象實例來保存cookie cookie = cookiejar.CookieJar() #利用urllib.request庫的HTTPCookieProcessor對象來創建cookie處理器,也就CookieHandler cookie_support = request.HTTPCookieProcessor(cookie) #通過CookieHandler創建opener opener = request.build_opener(cookie_support) #創建Request對象 req1 = request.Request(url='http://www.dianping.com/shop/1705777',headers=hd_xq) response1 = opener.open(req1) html = response1.read().decode('utf-8') return html
這樣的話大眾點評就可以順利爬取了。
另外大眾點評的經緯度是高德的,如果你想轉成百度的話,代碼如下:
#高德地圖轉百度地圖 def gcj02tobd09(lng, lat): """ 火星坐標系(GCJ-02)轉百度坐標系(BD-09) 谷歌、高德——>百度 :param lng:火星坐標經度 :param lat:火星坐標緯度 :return: """ z = math.sqrt(lng * lng + lat * lat) + 0.00002 * math.sin(lat * x_pi) theta = math.atan2(lat, lng) + 0.000003 * math.cos(lng * x_pi) bd_lng = z * math.cos(theta) + 0.0065 bd_lat = z * math.sin(theta) + 0.006 print(bd_lng) print(bd_lat) return [bd_lng, bd_lat]
補充:經過一個禮拜的爬數據:針對網站:58,大眾點評;總結如下:
第一:58同城這個網站如果使用代理ip的話,換不換ua沒有任何影響,換ua的話不使用ip代理的話就可能出現問題了,如鏈接超時了,404了等一系列錯誤。
第二:大眾點評這個網站就是個坑了,爬着爬着突然給你來個驗證碼,這時候要么你破解驗證碼,要么手動暫停程序再輸入驗證碼,當然這邊的話我不建議大家這么做太麻煩了。有人建議我說使用selenium去爬,我爬過,有時可以有時不行,當你爬不同的數據的時候貌似有不同的效果,所以建議大家使用唯一有效的辦法就是自動添加cookie,並且使用代理這樣的話基本大眾點評上的所有數據你應該都可以爬下來,如果不使用代理的話,那就看運氣吧,多運行幾次數據也可以爬到,cookie一定得添加,不然拒絕你訪問的。-----------------------------------最后的最后叫大家一個更簡單的方法:爬安卓端數據。這樣啥都可以解決,沒毛病。(備注:有大佬發現我哪不對的話,或者有好的方法,還請給個建議,謝謝<>
QQ:979352156)