• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

yuanhsh's blog: 如何用30行代码爬取Google Play 100万个App的数据

相关文章 搞java代码 2年前 (2023-03-11) 113次浏览 已收录 0个评论

Scrapy

中文文档

)是一个 Python 爬虫框架,它帮开发者做了绝大多数爬虫需要做的基础工作:

  • 内置元素选择器
  • 序列化和存储数据
  • 处理cookie、HTTP头这些东西的中间件
  • 爬取 Sitemap 或者 RSS

我的需求是爬取 Google Play 市场上的所有 App 的页面链接以及下载数量。

首先确保配置好 Python 2.7, MongoDB 数据库, 以及 Python 的 pip 包管理系统。

然后安装对应的 Python 包并且生成项目模板:

pip install scrapy scrapy-mongodb scrapy startproject <a href="https://www.gaodaima.com/tag/app" title="查看更多关于app的文章" target="_blank">app</a>cd <a href="https://www.gaodaima.com/tag/apps" title="查看更多关于apps的文章" target="_blank">apps</a>crapy genspider google

然后把 app/spider/google.py 换成下面的内容:

`# -*- coding: utf-8 -*-import scrapyfrom scrapy.contrib.spiders import CrawlSpider, Rulefrom scrapy.contrib.linkextractors.sgml import SgmlLinkExtractorfrom scrapy.contrib.linkextractors import LinkExtractorfrom app.items import GoogleItem    class GoogleSpider(CrawlSpider):        name = "google"        allowed_domains = ["play.google.com"]        start_urls = [            'http://play.google.com/',            'https://play.google.com/store/apps/details?id=com.viber.voip'        ]        rules = [            Rule(LinkExtractor(allow=("https://play\.google\.com/store/apps/details", )), callback='parse_app',follow=True),        ] #  CrawlSpider 会根据 rules 规则爬取页面并调用函数进行处理        def parse_app(self, response):            # 在这里只获取页面的 URL 以及下载数量            item = GoogleItem()            item['url'] = response.url            item['num'] =  response.xpath("//div[@itemprop='numDownloads']").xpath("text()").extract()            yield item

在 app/items 里添加下面的代码:

class GoogleItem(scrapy.Item):    url = scrapy.Field()    num = scrapy.Field()

在 app/setting.py 里面添加下面的代码

<code># 这里是配置 scrapy-mongodb 到数据库的连接,用于自动把爬取后的数据存入到 MongoDBITEM_PIPELINES = [     'scrapy_mongodb.MongoDBPipeline',]MONGODB_URI = 'mongodb://127.0.0.1:27017'MONGODB_DATABASE = 'scrapy'MONGODB_COLLECTION = 'play'

然后,没有其他工作了。。连配置文件一共不到四十行。之后开启 MongoDB,在项目目录下运行

 scrapy crawl google -s JOBDIR=app/jobs

然后就静静等它跑完吧。-s JOBDIR=app/jobs 参数的意思是把工作状态和已经爬取过的页面数据存到 app/jobs 目录下,即使中间中断了,也可以运行上面的命令从该目录恢复工作,而不用重新开始。

`> use scrapyswitched to db scrapy> db.play.count()1564754> db.play.find().limit(1) "_id" : ObjectId("55479d9da28a7c1cca449c23"), "url" : "https://play.google.com/store/apps/details?id=com.viber.voip", "num" : [ "  100,000,000 - 500,000,000  " ]() >

同时我也写了其他国内市场的爬虫,目前还在不断完善中,有需要的朋友可以看看。

此外推荐两个更值得学习的 Scrapy 爬虫项目:

From:

http://www.jianshu.com/p/411b20a5ce55

来源: http://yuanhsh.blogspot.com/2015/07/30google-play-100app.html


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:yuanhsh's blog: 如何用30行代码爬取Google Play 100万个App的数据

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址