scrapy介绍

Scrapy 是一套基于Twisted、纯python实现的异步爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,相当的方便~

整体架构和组成

Scrapy Engine(引擎)

引擎负责控制数据流在系统所有组件中的流动,并在相应动作发生时触发事件,是框架的核心。

Scheduler(调度器)

调度器从引擎接受request并将他们入队,在引擎再次请求时将请求提供给引擎。

Downloader(下载器)

下载器负责获取页面数据并提供给引擎,而后提供给spider。

Spider(爬虫)

Spider是Scrapy用户编写用于分析response并提取item(即获取到item)或额外跟进的URL的类,定义了爬取的逻辑和网页内容的解析规则。 每个spider负责处理一个特定(或一些)网站。

Item Pipeline(管道)

Item Pipeline负责处理被spider提取出来的item。典型的处理有清洗,验证及持久化(例如存取到数据库中)

Downloader Middlewares(下载中间件)

下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response(也包括引擎传递给下载器的Request)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。

Spider Middlewares(Spider中间件)

Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。

安装

pip install scrapy

爬虫项目

准备工作

创建项目

scrapy startproject xingmingdq

新建爬虫

scrapy genspider xingming resgain.net/xmdq.html

这个时候,目录下会创建xingmingdq文件夹,文件夹下就是xingmingdq scrapy项目,spiders下有xingming爬虫文件。

建立item

items.py中添加以下代码:

class Xingming_Item(scrapy.Item):

name = scrapy.Field()

xingshi = scrapy.Field()

xingshi_zh = scrapy.Field()

爬取名字

爬虫文件spiders/xingming.py书写网页解析规则。

# -*- coding: utf-8 -*-

import scrapy

from xingmingdq.items import Xingming_Item

class XingmingSpider(scrapy.Spider):

name = 'xingming'

# allowed_domains = ['www.resgain.net/xmdq.html']

start_urls = ['http://www.resgain.net/xmdq.html']

def parse(self, response):

content = response.xpath('//div[@class="col-xs-12"]/a/@href').extract()

for i in content:

page = 0

href = 'http:' + i

base = href.split('/name')[0] + '/name_list_'

while page < 10:

url = base + str(page) + '.html'

page += 1

yield scrapy.Request(url, callback=self.parse_in_html)

# 解析每一页

def parse_in_html(self, response):

person_info = response.xpath('//div[@class="col-xs-12"]/div[@class="btn btn-default btn-lg namelist"]/div[@style="margin-top: 20px;"]')

xingshi_zh = response.xpath('//div[@class="navbar-header"]/a/div[@style="text-align: center;"]/text()').extract()[0].split('姓之家')[0]

xingshi = response.url.split('/')[2].split('.')[0]

for every_one in person_info:

name = every_one.xpath('./text()').extract()[0]

the_item = Xingming_Item()

the_item['name'] = name

the_item['xingshi'] = xingshi

the_item['xingshi_zh'] = xingshi_zh

yield the_item

处理流程

pipelines.py中,编写结果写入文件的处理。

class XingmingdqPipeline(object):

def __init__(self):

self.fp = open('xingming.csv', 'w', encoding='utf-8')

def process_item(self, item, spider):

self.fp.write('%s,%s,%s\n' % (item['name'], item['xingshi_zh'], item['xingshi']))

return item

def close_spider(self, spider):

self.fp.close()

设置参数

要想执行pipelines,需要在settings.py中进行配置,搜索USER_AGENT和ITEM_PIPELINES进行修改。

# 修改USER_AGENT

USER_AGENT = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'

# 配置ITEM_PIPELINES

ITEM_PIPELINES = {

'xingmingdq.pipelines.XingmingdqPipeline': 300,

}

执行爬虫

命令执行

scrapy crawl xingming

脚本执行

写入python文件,创建run.py,编辑下面代码,pycharm中运行。

import os

os.system("scrapy crawl xingming")

结果文件

词云分析

导入爬取的姓名数据,分析出图:

哈哈哈,最多的竟然是婷婷

找找有你的名字没有吧。

scrapy mysql 词云_利用Scrapy爬取姓名大全作词云分析相关推荐

  1. Scrapy爬取姓名大全,看看那个名字最受父母青睐

    点击上方"AI搞事情"关注我们 最近在做的项目需要用到名字的数据,可哪儿有这么多名字给我用呢?经一通搜索,不仅找到一个神奇的网站姓名大全,还有人开源了爬虫的代码.让我一番修改,得到 ...

  2. 利用python爬取58同城简历数据_利用python爬取58同城简历数据-Go语言中文社区

    利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但 ...

  3. python 翻译库本地库_利用python爬取并翻译GEO数据库

    原标题:利用python爬取并翻译GEO数据库 GEO数据库是NCBI创建并维护的基因表达数据库,始于2000年,收录了世界各国研究机构提交的高通量基因表达数据,现芯片集数据量高达12万以上.想要从这 ...

  4. python爬取股票信息_利用Python爬取网易上证所有股票数据(代码

    利用Python爬取网易上证所有股票数据(代码 发布时间:2018-04-14 17:30, 浏览次数:1261 , 标签: Python import urllib.request import r ...

  5. python爬取电脑本地数据_利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息...

    原标题:利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息 新型肺炎肆虐全国,可以预知,最近一两年地理学中会有一部分论文研究新型肺炎的空间分布及与其他指标的关联分析.获取其患病人 ...

  6. python爬取微博数据词云_用Python爬取微博数据生成词云图片

    原标题:用Python爬取微博数据生成词云图片 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数 ...

  7. python爬取pubmed的文献_利用selenium爬取pubmed,获得搜索的关键字最近五年发表文章数量...

    PubMed 是一个提供生物医学方面的论文搜寻以及摘要,并且免费搜寻的数据库.是一个做生物方面经常要用到的一个查找文献的网站.最近刚学了爬虫相关的知识包括urllib库,requests库,xpath ...

  8. python弹幕拼脸_利用python爬取分析《隐秘的角落》20万+条弹幕,发现了这些..

    图片源自网路 要说近期最火的国产剧,非<隐秘的角落>不可.该剧改编自紫金陈的推理小说<坏小孩>,讲述了沿海小城的三个孩子在景区游玩时,无意拍摄记录了一次谋杀,他们的冒险也由此展 ...

  9. Python爬取网站用户手机号_利用python爬取慕课网站上面课程

    1.抓取网站情况介绍 抓取网站:http://www.imooc.com/course/list 抓取内容:要抓取的内容是全部的课程名称,课程简介,课程URL ,课程图片URL,课程人数(由于动态渲染 ...

最新文章

  1. OC从plist文件中获取数据
  2. php函数,static,globalkeyword及三种变量作用域
  3. C#学习笔记—了解C#
  4. 复利计算5.0——结对(总结)
  5. 01《软件需求分析教程》
  6. sketchup作品_18级园林工程技术专业课程实训作品展
  7. FFMPEG libx264解码为YUV
  8. ABAP RTTC动态编程在SAP gateway中的应用
  9. ajax获取对象获取不了属性,Ajaxing JavaScript变量到Django视图获取:AttributeError:“WSGIRequest”对象没有属性“data”...
  10. C#实现整数冒泡排序、选择排序
  11. 数据结构链表之队列,Python3实现——7
  12. MyBatis的CRUD操作
  13. php微信jsapi支付小结,ThinkPHP接入微信支付 - JSAPI支付
  14. 机器学习算法总结之K近邻(KNN)
  15. match和exec的对比
  16. tensorflow精进之路(二十六)——人脸识别(上)(MTCNN原理)
  17. Hive 数据质量检测
  18. 解决使用redis作为session缓存 报错 Error: no such key 的问题
  19. 如何委婉地拒绝公司的offer?
  20. 华为透露成长秘诀:信息化建设铸就发展奇迹

热门文章

  1. linux系统远程桌面
  2. 长尾词优化的过程控制和方法
  3. 思科Netflow的设置
  4. LuaJIT Bytecode介绍
  5. 关于vray材质球,的默认设置!
  6. 携程旅行android pad客户端,携程发布Android Pad版 无线布局初步完成
  7. php微砍价源码,轻晓云微砍价功能热门上线!
  8. tcp的可靠性体现在哪里
  9. 恋爱话术小程序源码-土味情话,恋爱导师支持多种流量主模式
  10. matlab 加等深线