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通过 ...
随机推荐
- vue-cli3.0使用及配置
1.先全局安装vue-cli3.0 检测安装: vue -V 2.创建项目(这个就跟react创建脚手架项目比较像了) 这里如果你是第一次用3.0版本的话,是没有前两个的,而只有最后两个,这里是 ...
- functools.wraps函数
原文地址:https://www.cnblogs.com/fcyworld/p/6239951.html 第一次见到functools.wraps是在 Flask Web开发 中,一直不明白怎么回事. ...
- 基本排序算法(Java)
基本排序算法 (Java) 经过几次笔试,发现自己的Java基础有些薄弱,基本的排序算法掌握的还不够熟练,需要多加学习总结. 1. 选择排序 思想: 给定一个整数数组,例 int[] a ={38,6 ...
- Navicat Premium 12 (64位)实现连接Oracle 11 (64位)
查看Oracle的版本 select * from v$version 我这里是11.2的64位的版本,然后从官网下载相应版本的客户端. 下载相应版本的客户端 官网地址:https://www.ora ...
- js 原生转json 可以v8中运行
// load("D:/jsontest.js"); function test1(vvv) { print(vvv); } //把json str 转 json obj func ...
- python:os.path模块常用方法
os.path模块主要用于文件的属性获取,在编程中经常用到,以下是该模块的几种常用方法.更多的方法可以去查看官方文档:http://docs.python.org/library/os.path.ht ...
- oc中的反射机制
好久没有总结过了,一直在赶项目... 今天来总结一下OC中的反射机制,有什么不对的地方,还请多多海涵. 反射机制,简单的说就是在程序运行期间通过类的名字来动态的获取类的信息,从而实现动态的创建类,以及 ...
- Centos服务器上NFS灾备环境及KVM的搭建及使用
1.概述 由于在单台服务器上搭建灾备环境需要KVM和NFS的支持,下面先列出KVM的搭建流程,再列出使用NFS实现单台服务器灾备的流程. A.搭建KVM环境 1>.主机环境准备 Linux Sy ...
- 2019_BUAAOO_第一单元总结
前言 OO第一单元共有三次作业,分别为多项式求导.带有三角函数与幂函数的表达式求导.带有嵌套表达式因子的表达式求导.虽然这三次作业都离不开求导,可是每次作业的复杂度都是大大递增的.对于习惯于面向过程编 ...
- win10 vscode使用 智能提示
1.没有第三方库的智能提示 参考:https://code.visualstudio.com/docs/python/editing 1.点开Settings 2.搜索加添加 3.添加后的内容 然后就 ...