Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy
爬前叨叨
2018年就要结束了,还有4天,就要开始写2019年的教程了,没啥感动的,一年就这么过去了,今天要爬取一个网站叫做酷安,是一个应用商店,大家可以尝试从手机APP爬取,不过爬取APP的博客,我打算在50篇博客之后在写,所以现在就放一放啦~~~

酷安网站打开首页之后是一个广告页面,点击头部的应用即可
页面分析
分页地址找到,这样就可以构建全部页面信息
我们想要保存的数据找到,用来后续的数据分析
上述信息都是我们需要的信息,接下来,只需要爬取即可,本篇文章使用的还是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'

得到数据
调整一下爬取速度和并发数
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注释--2019-04-28
一.JAVA自带注解 1.@Override:覆盖父类方法 2.@Deprecated:不建议使用(就是方法上画一条横线划掉那种) 3.@SuppressWarnings:去掉警告:使用方法:@Sup ...
- Codeforces 938D. Buy a Ticket (最短路+建图)
<题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...
- idea+scala sdk + scala插件
0X01 前言 我的主语言是python,说起java,想起了大二(三年前)上课时教过,课程设计的时候曾经做过个俄罗斯方块,后面其他设计copy代码读懂代码(再后面的课设就用python了). 本次涉 ...
- 纯 CSS 绘制三角形(各种角度)
转载:https://www.cnblogs.com/lhb25/p/css-and-css3-triangle.html Triangle Up #triangle-up { widt ...
- VMware Workstation安装Red hat7.0联网问题总结
1.在red hat7当中iconfig命令是被取消了的,开发者用ip addr命令取代了ifconfig命令. 当然也是可以用ifconfig命令的 (前提是你安装的linux是可以联网的): 1) ...
- 20181117-python第二章学习小结-part2
浮点型补充: 有限小数与无限循环小数,不包括无理数! 小数点后面的数据运算太复杂,精确度不及整数! 尽量使用科学计数表示小数 列表学习(语法) 创建:[] list = [] #创建空表 list ...
- VB读写进程的内存
在窗体部分简单测试了ReadProcessMemory和WriteProcessMemory对另一个程序进程的读写. 由于临时项目变动,又不需要了,所以直接封类,删工程.以下代码没有一个函数经过测试, ...
- MyBatis 缓存机制
Mybatis 有两级缓存: 一级缓存: 也称为本地缓存,SqlSession级别的缓存.一级缓存是一直开启的: 与数据库同一次会话期间查询到的数据会放在本地缓存中,以后如果需要获取相同的数据,直接从 ...
- jenkins安装配置
一.下载Jenkins 官网地址:https://jenkins.io/,图如下所示,点击下载可下载最新版本. 点击下载之后,我们可以看到下面的图,我这边选择的Jenkins.war 文件. 下面,使 ...
- linux-Vim命令合集
Vim命令合集 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filena ...