利用Python的scrapy框架爬取手游排行前几名的手游信息
来源:互联网 发布:淘宝达人网页 编辑:程序博客网 时间:2024/04/28 17:43
初学scrapy框架
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
有关于scrapy的教学与基础知识这里不做解释,感兴趣的同学可以去访问
http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html(此为中文教程,版本有点过时,但语法基本相同)
接下来进入正题:
所用的版本为Python3.6.1 scrapy为1.4.0
次篇实例会用到xpath(可在此网站学习http://www.runoob.com/xpath/xpath-syntax.html)与正则表达式,如果对其不了解的同学,建议先学
1、建立一个scrapy工程(此命令在dos下输入)
scrapy startproject AppGame
然后cd AppGame
2、在\AppGame\AppGame\spiders的目录下建立一个文件Appgame.py,此为spider文件,也就是定义爬虫的爬取规则的文件
代码如下:
'''
please in here defined yours spider
define crawler rules
'''
import scrapy
#下为导入的item类,后面会讲到
from AppGame.items import AppgameItem
class Myfilm(scrapy.Spider):
name="game"
allowed_domains=["anfensi.com"]#域名
start_urls = ['http://www.anfensi.com/top/wangyou/',
'http://www.anfensi.com/top/wangyou/2.html']
def parse(self,response):
#response是一个html响应对象可以用xpath规则进行解析
#这里我们需要分析一下http://www.anfensi.com/top/wangyou/这个网页的html,用Google的开发者工具查看
从上面可以看出游戏名称都是位于div元素id="tp5"的ul下的li元素下i下的a元素中
但是我们发现游戏的类型和标签都是位于u元素下的a元素中,那么我们就需要用到正则表达式来匹配,类型的都为/game/开头
而标签的为/tag/开头,所以用不同的正则表达式来完成
Topgame=response.xpath('//div[@id="tp5"]/ul/li')
for each_game in Topgame:
item= AppgameItem()
#存储游戏名字在item的name属性下
item['name']=each_game.xpath('./i/a/text()').extract()[0]
item['type']=each_game.xpath('./i/u/a[re:test(@href,"/game/.+")]/text()').extract()[0]
#因为后面没有[0],所以返回的是一个列表,不是字符串,所以下面将其转换为字符串
listlabel=each_game.xpath('./i/u/a[re:test(@href,"/tag/.+")]//text()').extract()
item['label']=str(listlabel)
yield item
3、接下来就是定义一个item文件,在AppGame\AppGame目录下编写item.py文件,也可以自己建立一个item文件
代码如下:
import scrapy
#item类似于字典
class AppgameItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
#游戏名字
name = scrapy.Field()
#游戏的类型
type=scrapy.Field()
#游戏的标签
label=scrapy.Field()
4、定义pipeline,在AppGame\AppGame目录下编写pipeline.py文件,也可以自己建立一个pipeline文件
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
class AppgamePipeline(object):
def process_item(self, item, spider):
with open ("my_games.txt",'a',encoding="utf-8") as f:
f.write(item['name']+ '\n')
f.write(item['type']+ '\n')
f.write(item['label']+ '\n')
5、定义setting文件,在AppGame\AppGame目录下编写setting.py文件
加入下面代码:
ITEM_PIPELINES = {'AppGame.pipelines.AppgamePipeline':100}
后面的100为优先级,越小优先级越高
6、然后直接运行
scrapy crawl game
这里的‘game’,就是 Appgame.py文件中定义的name的值,运行如下
当然没有全部截取
最后找到在pipeline中我们写入的文件my_games.txt,打开可以看到下面
我们可以发现RPG(角色扮演)类型的游戏占多数。
完成。
希望这篇博文对你有所帮助
- 利用Python的scrapy框架爬取手游排行前几名的手游信息
- [Python][Scrapy 框架] Python3 Scrapy的安装
- [Python][Scrapy 框架] Python3 Scrapy的安装
- Scrapy:Python的爬虫框架
- Python的爬虫框架 Scrapy
- python Scrapy框架的安装
- Scrapy:Python的爬虫框架
- windows下使用python的scrapy爬虫框架,爬取个人博客文章内容信息
- Python爬虫框架scrapy批量获取腾讯招聘网上面的信息
- Python抓取框架 Scrapy 的架构分析
- Python抓取框架:Scrapy的架构
- Python抓取框架:Scrapy的架构
- Python抓取框架:Scrapy的架构
- Python抓取框架:Scrapy的架构
- Python抓取框架:Scrapy的架构
- Python抓取框架 Scrapy 的架构分析
- Python爬虫抓取框架:Scrapy的架构
- Python抓取框架:Scrapy的架构
- HDU 【1022】Train Problem I
- vue-cli是什么?
- PAT B1031. 查验身份证
- 随笔记录一下android遇到的list为空的问题
- PHP 中常用的时间处理方法 date 函数
- 利用Python的scrapy框架爬取手游排行前几名的手游信息
- 单链表删除(Delete)或者去除(Remove)节点面试题总结
- piggy-bank
- item2访问服务器免登录配置
- 图像分割“LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation”
- Mysql 基本用法
- 拟训练自己编程能力
- Java中的cookie
- FastDFS分布式文件系统