前言
从0配置Scrapy爬虫程序,并记录如何调试脚本,保存数据到数据库。
这里我们以 Scrapy 推荐的官方练习项目为例进行实战演练
配置
1 初始环境
安装Anaconda,Anaconda是一个软件包管理和环境管理系统。
安装PyCharm,Python编辑器
2 创建Scrapy项目并运行
打开 Anaconda Prompt
运行以下命令
1 scrapy startproject quotes D:\PythonCode\CrawlerProject\ScrapyDemo
运行成功后得到如下项目文件
ScrapyDemo
|____ quotes
|________ spiders
|____________ __init__.py
|________ __init__.py
|________ items.py
|________ middlewares.py
|________ pipelines.py
|________ settings.py
|____ scrapy.cfg
2 切换到ScrapyDemo 目录,用下面的命令创建名为quotes的爬虫程序。
scrapy genspider quotesscrapy quotes.toscrape.com
运行完成会在spiders目录下得到quotesscrapy.py文件
3修改items.py文件,这里定义你抓取时数据的结构
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
class QuotesItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
text = scrapy.Field() # 每条名言的内容
author = scrapy.Field() # 作者
tags = scrapy.Field() # 标签
4 修改quotesscrapy.py文件,这里编写爬取页面的逻辑
import scrapy
from quotes.items import QuotesItem
class QuotesscrapySpider(scrapy.Spider):
name = "quotesscrapy" # 爬虫名称
allowed_domains = ["quotes.toscrape.com"] # 允许爬取的域名
start_urls = ["https://quotes.toscrape.com"] # 爬虫起始url
def parse(self, response, **kwargs):
quotes = response.css("div.quote")
for quote in quotes:
item = QuotesItem()
item["text"] = quote.css("span.text::text").extract_first("")
item["author"] = quote.css("small.author::text").extract_first("")
item["tags"] = quote.css("div.tags a.tag::text").extract()
yield item
5 运行程序
scrapy crawl quotesscrapy
3 调试Scrapy项目
1 在ScrapyDemo中新建main.py文件
2 在这个文件中编写代码
这个代码会导入Scrapy的执行模块(execute)并引入需要的库。然后,它会将当前文件所在目录添加到Python路径中,并打印该目录。接着,它会执行Scrapy命令,启动名为quotesscrapy的爬虫,并将结果保存到名为quotesscrapy.json的JSON文件中。
from scrapy.cmdline import execute
import sys
import os
# 打断点调试py文件
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
print(os.path.dirname(os.path.abspath(__file__)))
execute(['scrapy', 'crawl', 'quotesscrapy', '-o', 'quotesscrapy.json'])
3 运行main.py进行调试成功进入断点
4 数据持久化
1保存到本地的json文件
上述调试时将结果保存到名为quotesscrapy.json的JSON文件中
2保存到SQLserver数据库
修改pipelines.py文件
import pymssql
class QuotesPipeline:
def __init__(self):
self.conn = pymssql.connect(server='your_server', user='your_username', password='your_password',
database='your_database')
self.cursor = self.conn.cursor()
def process_item(self, item, spider):
# 构建插入SQL语句
insert_query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
self.cursor.execute(insert_query, (item['column1'], item['column2']))
self.conn.commit()
return item
def close_spider(self, spider):
self.cursor.close()
self.conn.close()
3 修改settings.py文件打开管道。
ITEM_PIPELINES = {
"quotes.pipelines.QuotesPipeline": 300,
}
4 运行main.py
总结
本文记录了创建Scrapy爬虫项目、调试Scrapy程序、爬取的数据保存到数据库、本地文件的操作。
标签:quotes,Python,self,py,scrapy,爬取,item,Scrapy From: https://blog.csdn.net/roc_wei_chen/article/details/140375008