日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2025/3/21 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 yspider爬取数据导入mysql_爬虫实战四、PyCharm+Scrapy爬取数据并存入MySQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、創建爬蟲項目

注意:不能直接使用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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。