Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy
爬前叨叨
2018年就要结束了,还有4天,就要开始写2019年的教程了,没啥感动的,一年就这么过去了,今天要爬取一个网站叫做酷安,是一个应用商店,大家可以尝试从手机APP爬取,不过爬取APP的博客,我打算在50篇博客之后在写,所以现在就放一放啦~~~
![python3爬虫入门教程](https://img-blog.csdnimg.cn/20181227150551373.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hpaGVsbA==,size_10,color_FFFFFF,t_70#pic_center =200x200)
酷安网站打开首页之后是一个广告页面,点击头部的应用即可
页面分析
分页地址找到,这样就可以构建全部页面信息
我们想要保存的数据找到,用来后续的数据分析
上述信息都是我们需要的信息,接下来,只需要爬取即可,本篇文章使用的还是scrapy
,所有的代码都会在文章中出现,阅读全文之后,你就拥有完整的代码啦
import scrapy
from apps.items import AppsItem # 导入item类
import re # 导入正则表达式类
class AppsSpider(scrapy.Spider):
name = 'Apps'
allowed_domains = ['www.coolapk.com']
start_urls = ['https://www.coolapk.com/apk?p=1']
custom_settings = {
"DEFAULT_REQUEST_HEADERS" :{
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'User-Agent':'Mozilla/5.0 你的UA'
}
}
代码讲解
custom_settings 第一次出现,目的是为了修改默认
setting.py
文件中的配置
def parse(self, response):
list_items = response.css(".app_left_list>a")
for item in list_items:
url = item.css("::attr('href')").extract_first()
url = response.urljoin(url)
yield scrapy.Request(url,callback=self.parse_url)
next_page = response.css('.pagination li:nth-child(8) a::attr(href)').extract_first()
url = response.urljoin(next_page)
yield scrapy.Request(url, callback=self.parse)
代码讲解
- response.css 可以解析网页,具体的语法,你可以参照上述代码,重点阅读 ::attr('href') 和 ::text
- response.urljoin 用来合并URL
- next_page 表示翻页
parse_url函数
用来解析内页,本函数内容又出现了3个辅助函数,分别是self.getinfo(response)
,self.gettags(response)
, self.getappinfo(response)
还有response.css().re
支持正则表达式匹配,可以匹配文字内部内容
def parse_url(self,response):
item = AppsItem()
item["title"] = response.css(".detail_app_title::text").extract_first()
info = self.getinfo(response)
item['volume'] = info[0]
item['downloads'] = info[1]
item['follow'] = info[2]
item['comment'] = info[3]
item["tags"] = self.gettags(response)
item['rank_num'] = response.css('.rank_num::text').extract_first()
item['rank_num_users'] = response.css('.apk_rank_p1::text').re("共(.*?)个评分")[0]
item["update_time"],item["rom"],item["developer"] = self.getappinfo(response)
yield item
三个辅助方法如下
def getinfo(self,response):
info = response.css(".apk_topba_message::text").re("\s+(.*?)\s+/\s+(.*?)下载\s+/\s+(.*?)人关注\s+/\s+(.*?)个评论.*?")
return info
def gettags(self,response):
tags = response.css(".apk_left_span2")
tags = [item.css('::text').extract_first() for item in tags]
return tags
def getappinfo(self,response):
#app_info = response.css(".apk_left_title_info::text").re("[\s\S]+更新时间:(.*?)")
body_text = response.body_as_unicode()
update = re.findall(r"更新时间:(.*)?[<]",body_text)[0]
rom = re.findall(r"支持ROM:(.*)?[<]",body_text)[0]
developer = re.findall(r"开发者名称:(.*)?[<]", body_text)[0]
return update,rom,developer
保存数据
数据传输的item在这个地方就不提供给你了,需要从我的代码中去推断一下即可,哈哈
import pymongo
class AppsPipeline(object):
def __init__(self,mongo_url,mongo_db):
self.mongo_url = mongo_url
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls,crawler):
return cls(
mongo_url=crawler.settings.get("MONGO_URL"),
mongo_db=crawler.settings.get("MONGO_DB")
)
def open_spider(self,spider):
try:
self.client = pymongo.MongoClient(self.mongo_url)
self.db = self.client[self.mongo_db]
except Exception as e:
print(e)
def process_item(self, item, spider):
name = item.__class__.__name__
self.db[name].insert(dict(item))
return item
def close_spider(self,spider):
self.client.close()
代码解读
- open_spider 开启爬虫时,打开Mongodb
- process_item 存储每一条数据
- close_spider 关闭爬虫
- 重点查看本方法 from_crawler 是一个类方法,在初始化的时候,从setting.py中读取配置
SPIDER_MODULES = ['apps.spiders']
NEWSPIDER_MODULE = 'apps.spiders'
MONGO_URL = '127.0.0.1'
MONGO_DB = 'KuAn'
![python3爬虫入门教程](https://img-blog.csdnimg.cn/20181227161749956.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hpaGVsbA==,size_16,color_FFFFFF,t_70#pic_center =20%x20%)
得到数据
调整一下爬取速度和并发数
DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
CONCURRENT_REQUESTS_PER_DOMAIN = 8
代码走起,经过一系列的努力,得到数据啦!!!
抽空写个酷安的数据分析,有需要源码的,自己从头到尾的跟着写一遍就O98K了
Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy的更多相关文章
- Python爬虫入门教程 27-100 微医挂号网专家团队数据抓取pyspider
1. 微医挂号网专家团队数据----写在前面 今天尝试使用一个新的爬虫库进行数据的爬取,这个库叫做pyspider,国人开发的,当然支持一下. github地址: https://github.com ...
- Python爬虫入门教程 24-100 微医挂号网医生数据抓取
1. 写在前面 今天要抓取的一个网站叫做微医网站,地址为 https://www.guahao.com ,我们将通过python3爬虫抓取这个网址,然后数据存储到CSV里面,为后面的一些分析类的教程做 ...
- Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分
1. 爬取前的分析 mitmdump是mitmproxy的命令行接口,比Fiddler.Charles等工具方便的地方是它可以对接Python脚本. 有了它我们可以不用手动截获和分析HTTP请求和响应 ...
- Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分
1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...
- Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy
爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwor ...
- Python基础入门教程
Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...
- Python爬虫入门教程 1-100 CentOS环境安装
简介 你好,当你打开这个文档的时候,我知道,你想要的是什么! Python爬虫,如何快速的学会Python爬虫,是你最期待的事情,可是这个事情应该没有想象中的那么容易,况且你的编程底子还不一定好,这套 ...
- Python爬虫入门教程 5-100 27270图片爬取
27270图片----获取待爬取页面 今天继续爬取一个网站,http://www.27270.com/ent/meinvtupian/ 这个网站具备反爬,so我们下载的代码有些地方处理的也不是很到位, ...
- Python爬虫入门教程 50-100 Python3爬虫爬取VIP视频-Python爬虫6操作
爬虫背景 原计划继续写一下关于手机APP的爬虫,结果发现夜神模拟器总是卡死,比较懒,不想找原因了,哈哈,所以接着写后面的博客了,从50篇开始要写几篇python爬虫的骚操作,也就是用Python3通过 ...
随机推荐
- java testng框架的windows自动化-自动运行testng程序下篇
本文旨在让读者简单了解testng的自动运行 接上文https://www.cnblogs.com/xuezhezlr/p/9213456.html,文章大致把testng中比较特殊的两个xml形式说 ...
- 3dmax 3dmax计算机要求 3dmax下载
渲染首先是要X64兼容台式电脑,笔记本不行,笔记本就是学生拿来玩还行,渲染大图笔记本真的是发热. 配置一般的电脑和笔记本千万不要尝试安装3dmax2019了,很卡的,3dmax2019只有64位,没有 ...
- github-新建文件夹
1,进入仓库“ sstruggle.github.io ”中,在该仓库页面中找到“ Create new file ”,如图: 2,在创建新文件页面,输入“ js/ ”,github默认为是一个文件夹 ...
- 百度TTS的来由
#### https://home-assistant.io/components/tts.baidu/#### https://github.com/charleyzhu/HomeAssistant ...
- VB输出数据到EXCEL
Private Sub Command1_Click() Dim i As Long Dim j As Long , ) As Long Dim xlApp, WS, WB Set xlApp = C ...
- 基于.net的Socket异步编程总结
最近在为公司的分布式服务框架做支持异步调用的开发,这种新特性的上线需要进行各种严格的测试.在并发性能测试时,性能一直非常差,而且非常的不稳定.经过不断的分析调优,发现Socket通信和多线程异步回调存 ...
- Kafka监控工具kafka-monitor v0.1简要介绍
Kafka Monitor为Kafka的可视化管理与监控工具,为Kafka的稳定运维提供高效.可靠.稳定的保障,这里主要简单介绍Kafka Monitor的相关功能与页面的介绍: Kafka Moni ...
- [AtCoder 2702]Fountain Walk - LIS
Problem Statement In the city of Nevermore, there are 108 streets and 108 avenues, both numbered fro ...
- python中的单向循环链表实现
引子 所谓单向循环链表,不过是在单向链表的基础上,如响尾蛇般将其首尾相连,也因此有诸多类似之处与务必留心之点.尤其是可能涉及到头尾节点的操作,不可疏忽. 对于诸多操所必须的遍历,这时的条件是什么?又应 ...
- javascript 零碎笔记
使用 live-serve 这个工具,可以热更新 js 代码 逻辑运算符: 常用于单边条件判断,比如 真判断(获取子属性) {error && <div className=&q ...