Python爬虫实战2.0

这次实战的内容是异步加载:
异步加载和普通的数字下表迭代的URL不同的地方在于不能直接通过一个for循环来获取每一个页面的内容。
如何判别翻页是否是异步加载的呢?打开浏览器检查,然后定位到页面内容的那部分HTML代码,然后在浏览器按下翻页按钮,如果发现HTML代码部分内容闪了一下,那么说明网页是通过异步加载的。

爬取方法:
(以豌豆荚为例, 比如要爬取 http://www.wandoujia.com/category/5029
通过上面的判断依据,很容易可以发现是异步加载。
1、到浏览器检查中network选项中,筛选出XHR的内容
2、翻页
find XHR
图中出现的唯一一个文件就是异步加载内容的来源。
url
这个URL就是我们真正翻出来的页面了,这个是可以在浏览器打开的,不同的网站异步加载的网页是不一样的,所以在解析网页的时候需要根据不同情况来制定不同的处理方案。

由于豌豆荚的反爬虫机制,导致我的爬虫只能爬到前两页的内容,不过没关系,这次的实践主题是应对异步加载,从这个角度看,我还是很出色地完成了。

后来发现了一个网站既是异步加载,又没有很强的反爬虫机制。
就是小米应用商店网页版:http://app.mi.com
xiaomiapp
这里的话就直接上代码就好了,分析方法都是上面讲过的,页面解析则是前一篇博客有讲到过。

        for page in range(0, 10000):
            try:
                url = url_mi_1 + str(page)+url_mi_2
                print(url)
                r = requests.get(url, headers=headers)
                soup = BeautifulSoup(r.text, 'html.parser')

                # print(soup)
                pattern = re.compile("displayName\":\"(.*?)\",\"icon\"")
                finds = pattern.findall(str(soup))
                print(finds)
                if len(finds) != 0:
                    with open("app_mi1.2.txt", 'a', encoding='utf-8')as f:
                        for find_ in finds:
                            f.write(find_+'\n')

                print("----------page" + str(page) + " done!!----------")
            except:
                print("----------page" + str(page) + " fail!!----------")
                page -= 1

在这里留个小彩蛋,其实这个小米app网站是有个很强的规律,找到这个规律就可以一次性爬完网页上全部的app,如此机智的你能否发现呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值