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一定得添加,不然拒绝你访问的。-----------------------------------最后的最后叫大家一个更简单的方法:爬安卓端数据。这样啥都可以解决,没毛病。(备注:有大佬发现我哪不对的话,或者有好的方法,还请给个建议,谢谢<>)