一、创建爬虫项目

注意:不能直接使用PyCharm创建Scrapy项目,所以需要在爬虫实战三、PyCharm搭建Scrapy开发调试环境的基础(PyCharm配置完Scrapy)之上,选中mySpider项目,点击PyCharm中下方的Terminal,进入对应的命令行,执行命令创建doubanSpider项目

scrapy startproject doubanSpider

进入命令行。

TIM截图20190215160227.png

创建项目。

图片.png

二、创建爬虫并编写代码

爬虫项目生成后,进入项目路径。

图片.png

执行命令创建douban爬虫

scrapy genspider douban "movie.douban.com"

2-1、编写items.py

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

# Define here the models for your scraped items

#

# See documentation in:

# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy

class DoubanspiderItem(scrapy.Item):

# 电影标题

title = scrapy.Field()

# 电影信息

info = scrapy.Field()

# 电影评分

score = scrapy.Field()

# 评分人数

number = scrapy.Field()

# 简介

content = scrapy.Field()

2-2、编写spiders/douban.py

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

import scrapy

from doubanSpider.items import DoubanspiderItem

class DoubanSpider(scrapy.Spider):

name = "douban"

allowed_domains = ["movie.douban.com"]

start = 0

url = 'https://movie.douban.com/top250?start='

end = '&filter='

start_urls = [url + str(start) + end]

def parse(self, response):

item = DoubanspiderItem()

movies = response.xpath("//div[@class=\'info\']")

for movie in movies:

name = movie.xpath('div[@class="hd"]/a/span/text()').extract()

message = movie.xpath('div[@class="bd"]/p/text()').extract()

star = movie.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract()

number = movie.xpath('div[@class="bd"]/div[@class="star"]/span/text()').extract()

quote = movie.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()

if quote:

quote = quote[0]

else:

quote = ''

item['title'] = ''.join(name)

item['info'] = quote

item['score'] = star[0]

item['content'] = ';'.join(message).replace(' ', '').replace('\n', '')

item['number'] = number[1].split('人')[0]

# 提交item

yield item

if self.start <= 225:

self.start += 25

yield scrapy.Request(self.url + str(self.start) + self.end, callback=self.parse)

2-3、编写pipelines.py

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

# Define your item pipelines here

#

# Don't forget to add your pipeline to the ITEM_PIPELINES setting

# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

from pymysql import cursors

from twisted.enterprise import adbapi

import time

import copy

class DoubanspiderPipeline(object):

# 初始化函数

def __init__(self, db_pool):

self.db_pool = db_pool

# 从settings配置文件中读取参数

@classmethod

def from_settings(cls, settings):

# 用一个db_params接收连接数据库的参数

db_params = dict(

host=settings['MYSQL_HOST'],

user=settings['MYSQL_USER'],

password=settings['MYSQL_PASSWORD'],

port=settings['MYSQL_PORT'],

database=settings['MYSQL_DBNAME'],

charset=settings['MYSQL_CHARSET'],

use_unicode=True,

# 设置游标类型

cursorclass=cursors.DictCursor

)

# 创建连接池

db_pool = adbapi.ConnectionPool('pymysql', **db_params)

# 返回一个pipeline对象

return cls(db_pool)

# 处理item函数

def process_item(self, item, spider):

# 对象拷贝,深拷贝 --- 这里是解决数据重复问题!!!

asynItem = copy.deepcopy(item)

# 把要执行的sql放入连接池

query = self.db_pool.runInteraction(self.insert_into, asynItem)

# 如果sql执行发送错误,自动回调addErrBack()函数

query.addErrback(self.handle_error, item, spider)

# 返回Item

return item

# 处理sql函数

def insert_into(self, cursor, item):

# 创建sql语句

sql = "INSERT INTO movie (title,info,score,number,content,createtime) VALUES ('{}','{}','{}','{}','{}','{}')".format(

item['title'], item['info'], item['score'], item['number'], item['content'],

time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

# 执行sql语句

cursor.execute(sql)

# 错误函数

def handle_error(self, failure, item, spider):

# #输出错误信息

print("failure", failure)

2-4、编写settings.py

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

BOT_NAME = 'doubanSpider'

SPIDER_MODULES = ['doubanSpider.spiders']

NEWSPIDER_MODULE = 'doubanSpider.spiders'

# Obey robots.txt rules

ROBOTSTXT_OBEY = True

USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'

# Configure item pipelines

# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html

ITEM_PIPELINES = {

'doubanSpider.pipelines.DoubanspiderPipeline': 300

}

# 连接数据MySQL

# 数据库地址

MYSQL_HOST = 'localhost'

# 数据库用户名:

MYSQL_USER = 'root'

# 数据库密码

MYSQL_PASSWORD = 'root'

# 数据库端口

MYSQL_PORT = 3306

# 数据库名称

MYSQL_DBNAME = 'mydb'

# 数据库编码

MYSQL_CHARSET = 'utf8'

在创建爬虫并编写代码时遇到的坑

坑1、Unresolved reference ‘xxx’ 或者显示 scrapy No module named ×××.items

TIM截图20190215170939.png

坑1、解决办法

将爬虫项目的文件夹类型改为Sources Root

TIM截图20190215171022.png

坑2、连接MySQL时缺少pymysql

TIM截图20190215171154.png

坑2、解决办法

点击File-> Settings->Project: mySpider->Project Interpreter,导入pymysql包。具体添加包的流程参考爬虫实战三、PyCharm搭建Scrapy开发调试环境。

TIM截图20190215171242.png

三、使用Pycharm连接MySQL数据库

连接MySQL的工具有很多,Pycharm本身也可以连接MySQL和其他多种数据库,并且提示功能比较强大,这里我使用Pycharm连接MySQL数据库。

TIM截图20190215171919.png

选择数据库类型,MySQL

TIM截图20190215171941.png

设置连接别名,主机,数据库,用户名,密码。

TIM截图20190215172302.png

设置完毕,连接MySQL。

图片.png

四、创建爬虫项目对应的表以及执行爬虫。

4-1、创建表

图片.png

创建movie表,注意 default charset = utf8 此处要和爬虫程序编码一致,否则存入到MySQL失败。

drop table movie;

CREATE TABLE `movie`

(

`id` int(100) NOT NULL AUTO_INCREMENT,

`title` varchar(2048) DEFAULT NULL,

`info` varchar(2048) DEFAULT NULL,

`score` varchar(2048) DEFAULT NULL,

`number` varchar(2048) DEFAULT NULL,

`content` varchar(2048) DEFAULT NULL,

`createtime` varchar(2048) DEFAULT NULL,

PRIMARY KEY (`id`)

) engine = InnoDB

default charset = utf8;

4-2、执行爬虫

在爬虫项目对应的命令行中执行命令,运行爬虫

scrapy crawl douban

TIM截图20190215171741.png

4-3、查询数据,验证结果

在本地连接中执行SQL:

select * from movie;

TIM截图20190215172554.png

爬虫数据并存入MySQL成功。注意,网上有部分博客实践后出现数据重复问题,此处我已经修改过代码保证数据不重复。

TIM截图20190215172854.png

yspider爬取数据导入mysql_爬虫实战四、PyCharm+Scrapy爬取数据并存入MySQL相关推荐

  1. 用python 爬取百度百科内容-爬虫实战(一) 用Python爬取百度百科

    最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释 我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果 但是自己又没有心思做这样一个数 ...

  2. Python 爬虫实战,模拟登陆爬取数据

    Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...

  3. Python爬虫实战系列(一)-request爬取网站资源

    Python爬虫实战系列(一)-request爬取网站资源 python爬虫实战系列第一期 文章目录 Python爬虫实战系列(一)-request爬取网站资源 前言 一.request库是什么? 二 ...

  4. python爬虫实战(一)--爬取知乎话题图片

    原文链接python爬虫实战(一)–爬取知乎话题图片 前言 在学习了python基础之后,该尝试用python做一些有趣的事情了–爬虫. 知识准备: 1.python基础知识 2.urllib库使用 ...

  5. 用爬虫抓取动态加载数据丨Python爬虫实战系列(6)

    提示:最新Python爬虫资料/代码练习>>戳我直达 前言 抓取动态加载数据 话不多说,开练! 爬虫抓取动态加载数据 确定网站类型 首先要明确网站的类型,即是动态还是静态.检查方法:右键查 ...

  6. 用DevExpress.Xpo 直接维护后台的 数据表,在这四列中录入的数据,即时插入或更新到关联的数据表中

    用DevExpress.Xpo 直接维护后台的 数据表,在这四列中录入的数据,即时插入或更新到关联的数据表中. 步骤: 1.引入DevExpress.Xpo.DLL服务 2.加入这些 using De ...

  7. 爬虫实战——绝对通俗易懂,爬取房产数据

    爬取房产数据 爬虫介绍 实战目标 1.获取url 2.利用BeautifulSoup获取html的索引 3.查找所需数据索引 4.正则表达式获取所需要的信息 完整代码 爬虫介绍 简单介绍一下爬虫,百度 ...

  8. python实例豆瓣音乐代码_Python爬虫实战(3)-爬取豆瓣音乐Top250数据(超详细

    前言 首先我们先来回忆一下上两篇爬虫实战文章: 第一篇:讲到了requests和bs4和一些网页基本操作. 第二篇:用到了正则表达式-re模块 今天我们用lxml库和xpath语法来爬虫实战. 1.安 ...

  9. java爬取网页数据_Python网络爬虫实战(二)数据解析

    Python网络爬虫实战 (二)数据解析 本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站 ...

最新文章

  1. 系统监控:top vs Htop vs Glances
  2. ZOJ 3820 Building Fire Stations
  3. JAVA SE学习day_08:TCP通信、多线程(并联)
  4. mplayer最全的命令
  5. 猫晚流量再创记录,阿里云直播方案护航优酷2500万用户体验
  6. 杨国福或夺“麻辣烫第一股”,是否名副其实?
  7. IOS FRAMEWORK,动态库 等几个问题
  8. Linux-sudo详解
  9. OD使用教程21(上) - 调试篇21
  10. jQuery按键监听(模拟QQ聊天:按下回车键发送消息)
  11. Microsoft C++ 异常: dlib::serialization_error,位于内存位置 0x0133F818 处
  12. WPS2019 Ubuntu可以插入公式
  13. 【转】数字会议系统功能之解析
  14. 【编程开发】之 Java 实现邮件发送
  15. 【机器学习|数学基础】Mathematics for Machine Learning系列之图论(8):割边、割集、割点
  16. linux中的wget命令
  17. 8个良心的国产小众软件,知乎10w人精选!
  18. 网络推广主管工作汇报实操指南
  19. 全球报告表明,中文是现如今增速最快的语言学习赛道,全球有超过600万人在学中文 | 美通社头条...
  20. 微信上赚钱需要准备什么?

热门文章

  1. spring注解源码分析--how does autowired works?
  2. 【采用】【风控系统】风控中心—京东基于Spark的风控系统架构实践和技术细节
  3. 十分钟学习自然语言处理概述
  4. 专访格灵深瞳CTO赵勇:为 计算机视觉 赋予智慧的光芒
  5. 如何搭建一套融资租赁业务系统
  6. 深入理解分布式技术 - 配置中心
  7. 深入理解分布式技术 - 服务注册与发现背后的逻辑
  8. Redis进阶-细说分布式锁
  9. Algorithms_入门基础_如何使用最高效的方式来判断一个数是否是2的N次方
  10. Linux 在 linux 中搭建 FTP 服务