c爬虫抓取网页数据(前段时间写了爬取美团商家信息的博客爬虫抓取美团网上)
优采云 发布时间: 2021-09-20 22:02c爬虫抓取网页数据(前段时间写了爬取美团商家信息的博客爬虫抓取美团网上)
前段时间,我写了一篇关于抓取美团商业信息的博客。爬虫会抓取美团所有的商业信息。这一次,我说的是爬行糯米。由于某些原因,我无法提供源代码。然而,代码不是关键,关键是思想。理解了这个思想之后,代码就很容易编写了
对于爬虫来说,最重要的是根据实际的请求过程分析请求过程和请求数据
分析是否需要处理cookie。有些网站是严格的。从某些接口请求数据时需要cookie。获取cookies的链接通常是主页。通常,系统将有一个jsessionid来维护会话。由于您访问一个页面,服务器将向您返回此jsessionid,但是如果您访问一些没有此cookie的接口,服务器将不会向您返回数据。您可以看到我之前写的关于使用Python对12306以上的所有车次数据进行爬网的内容。爬行12306时需要处理Cookie
分析网站的请求限制,因为爬虫程序将增加其服务器压力、流量浪费和数据丢失。因此,许多网站将对请求数量进行限制。然而,由于他们的数据是开放的,他们可以爬行。这只是成本问题。一般来说,他们会根据IP限制请求,当请求达到一定次数时会有一个验证码。例如,攀爬天眼检查数据时会遇到此问题。你可以使用代理。现在获得代理既容易又便宜
是否通过Ajax加载网站分析的数据,返回的数据是否加密。通常,这种情况可以由没有界面的浏览器请求,浏览器将自行处理这些事情
抓取页面并解析所需数据更容易。页面已被捕获。您可以使用一些开源框架来解析页面中的数据,也可以使用常规框架
下面分析如何在线获取糯米数据
经过分析,发现糯米不需要处理cookies,没有Ajax加载,并且有请求限制,所以只需要使用代理
我们现在分析如何抓取所有数据
从链接中,我们可以猜测北京是北京,364是火锅的分类,307-1388是区域。提前采集这些数据,爬行回来时直接拼接,方便快捷
我在这里只对城市进行分类,而不是地区,所以当我们攀登时,地区和商业区需要被处理。我们可以先拼接城市和分类,然后获得区/县
然后遍历各区县,得到商圈,再遍历,最后得到团购数据
# 区/县
def getArea(cityUrl,cityName,type,subType,subTypeCode):
url=cityUrl+"/"+subTypeCode
soup=download_soup_waitting(url)
try:
geo_filter_wrapper=soup.find("div",attrs={"class":"filterDistrict"})
J_filter_list=geo_filter_wrapper.find("div",attrs={"class":"district-list-ab"})
lis=J_filter_list.findAll("a")
for li in lis :
# a=li.find("a")
url='http:'+li['href']
area=li.text
getSubArea(url,area,cityName,type,subType)
except:
getBusiness(url,"","",cityName,type,subType)
# 商圈
def getSubArea(url,area,cityName,type,subType):
soup=download_soup_waitting(url)
geo_filter_wrapper=soup.find("div",attrs={"class":"district-sub-list-ab"})
if geo_filter_wrapper==None:
getBusiness(url,"",area,cityName,type,subType)
return
lis=geo_filter_wrapper.findAll("a")[1:]
for li in lis :
# a=li.find("a")
url=li['href']
subArea=li.text
getBusiness("http:"+url,subArea,area,cityName,type,subType)
现在我们来分析团购信息
可以发现,这不是一个商户,而是一个集团购买的商品,表明这些集团购买的许多商品都是同一个商户。我们把它分为两层,因为这一层依次是一个城市和一个类别。但是,没有通过团购获取商户信息的订单
爬上这一层后,结果如下
我们无法在这一层获得有关商户的更多详细信息,但我们可以通过此团购链接获得更多详细信息。我们将整理这些团购链接,然后在第二层爬行
这是我们需要的数据,但在实际爬网过程中发现捕获的页面没有这些数据。您可以猜测它是通过Ajax加载的
现在打开firebug并刷新页面
我发现这和我的猜测是一样的。这些数据是通过Ajax加载的。检查链接,发现只要交易成功,就可以拼接链接
最后,只需解析并保存捕获的数据
在分析整个过程并编写代码后,可以让程序缓慢运行。我的数据运行了一个月才有结果。然后整理数据。最终数据如下:
453792糯米食品数据
149002糯米寿命数据
糯米娱乐74932条数据
诺米美容73123条数据
数据总数为750849
时间:20170404
有关技术问题或此数据,请联系Zhenpeng_#Lin#替换为@