python爬取大众点评_Python爬虫,获取大众点评上海地区的餐饮信息!

需求:获取大众点评官网上上海地区的全部餐饮信息(店名,商圈,星级,评论数,人均数,口味评分,环境评分,服务评分,地址,电话等信息)

分析:餐饮种类分为18种,每一种下面又有子分类!

接着我们拿一个种类来分析的它的页数,会发现最多只有50页。所以没办法,我们就能或者每个种类的50页信息!

再来,就是分析店家中我们所有获取的信息了,我们按F12,点击店家信息,就会发现有些信息,就只显示了串字符,并不想我们想象中那样,直接显示出来!好的,这就是大众点评的一个加密方式,我们网页上只有看到的信息,是通过图片映射出来的,所有查看源码就很清晰的发现只是一串字符!

现在就开始着手分析加密方式了!老方法F12,开发者工具来一步步分析!在这里,我们需要注意三个东西,第一个就是url,第二个就是css,第三个就是宽高!

接着我们打开css(http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/a1b35e043d242cf3f26a907283c9d14f.css),发现所有那些加密的字符串,都是通过css样式,显示出来的!而background:-330.0px -141.0px,正是映射的关键。如果你改一下这些px值,就会发现原本的网页中的文字变动了,那我们就可以大胆的推测下,图片文字的映射就是通过background中的值,来投射到网页中。我们一开始就注意到了网页中文字的宽高,那我们用background值去除以这个宽高,x=330/14(width)=23.57=24(四舍五入),y=141/31(height)=4.54=5(四舍五入),算出x,y之后,我就想,那这x,y会不会就是对应着文字中的行和列呢,我就是试了一下。结果发现就是我想的那样。x,y就是对应文字中的行和列。那么这个加密就算破解了!

#地址解密

def get_text(id):

#获取加密的值的x,y坐标,例如:zogwtn

re_wqd=re.compile(r"\.%s{background:-(\d+)\.0px -(\d+)\.0px;}" % id)

time.sleep(0.1)

wqd = re.findall(re_wqd, one)

x=wqd[0][0] #x坐标

y=wqd[0][1] #y坐标

sum_x=int((int(x)/14)) #计算x偏移量

sum_y=round(int(y)/34) #计算y的偏移量

if sum_y!=0:

sum_y -=1

# print("x轴:{},y轴:{}|x偏移量:{},y偏移量:{}".format(e,f,sum_e,sum_f))

#获取到加密的数字组

url_qfr="http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/882b981e5726db198e310153eb7a2615.svg"

# url_content="http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/55c0bcb254f6c74cd3e2bb4075502a96.svg"

response=requests.get(url_qfr,headers=head.headers).text

get_wqd=re.findall(">(.+?)",response)

wqd_list=[]

for i in get_wqd:

wqd_list.append(list(i))

return wqd_list[sum_y][sum_x]

搞定这个加密破解一下,那我们就可以获取所需的数据了!最后把数据保存在MySQL中。

还值得一提的就是,这个验证码,大众的验证码分为两种,一种是滑动,一种是输入文字。

一开始,想着怎么破解这个验证,结果用尽毕生所学也搞不了,那只能上大杀器了selenium,每当需要验证的时候就自动弹出窗口,手动验证!(手动滑稽)真的没辙了,只能想出这个办法了!不过也还行,验证一般大半个小时才会提示验证一下。只要手动验证完就有可以接着爬取了!

最后的成果:

总结:爬取的数据量,还是有点小多,一开始爬,我就只用了单线程,白天大概就爬4,5千这样的数据(一般爬6个小时),然后我发现太慢了,就改进一下用多线程,速度就提升了一倍,一样的时间可以爬取1万多条数据。主要还是不敢爬太快,一是怕被封ip,二是怕给它网站服务器造成伤害。就慢慢爬!JXiuFen/dazhong​github.comv2-eb65f0b9b0dcd65b9254e3363d6cb95e_ipico.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值