我的第一个Scrapy 程序 - 爬取当当网信息
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,前面已经安装了Scrapy,下面来实现第一个测试程序。概述Scrapy是一个爬虫框架,他的基本流程如下所示(下面截图来自互联网)简单的说,我们需要写一个item文件,定义返回的数据结构;写一个spid
千家信息网最后更新 2026年11月02日我的第一个Scrapy 程序 - 爬取当当网信息
前面已经安装了Scrapy,下面来实现第一个测试程序。
概述
Scrapy是一个爬虫框架,他的基本流程如下所示(下面截图来自互联网)
简单的说,我们需要写一个item文件,定义返回的数据结构;写一个spider文件,具体爬取的数据程序,以及一个管道 pipeline 文件,作为后续操作,比如保存数据等等。
下面以当当网为例,看看怎么实现。
这个例子里面我想爬取的内容是前面20页的羽绒服产品,包括产品名字,链接和评论数。
过程
1. 创建一个Scrapy的项目
scrapy startproject dangdang2. 创建一个爬虫文件**
scrapy genspider -t basic dd dangdang.com
这样他会自动创建一个爬虫文件,结构如下所示:
3. 编写items.py
items.py
# -*- coding: utf-8 -*-# Define here the models for your scraped items## See documentation in:# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass DangdangItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() title=scrapy.Field() url=scrapy.Field() comment=scrapy.Field()4. 编写爬虫文件dd.py
前面第二步已经自动生成了一个模板,我们直接修改就行。
dd.py
# -*- coding: utf-8 -*-import scrapyfrom dangdang.items import DangdangItemfrom scrapy.http import Requestclass DdSpider(scrapy.Spider): name = 'dd' allowed_domains = ['dangdang.com'] start_urls = ['http://category.dangdang.com/pg1-cid4010275.html'] def parse(self, response): item=DangdangItem() item['title']=response.xpath(u"//a[@dd_name='单品标题']/text()").extract() item['url']=response.xpath("//a[@dd_name='单品标题']/@href").extract() item['comment']=response.xpath("//a[@dd_name='单品评论']/text()").extract() text = response.body # content_type = chardet.detect(text) # if content_type['encoding'] != 'UTF-8': # text = text.decode(content_type['encoding']) # text = text.encode('utf-8') # print(text) yield item for i in range(2,20): url='http://category.dangdang.com/pg%d-cid4010275.html'%i yield Request(url,callback=self.parse)5. 编写pipelines.py
为了使用pipeline,配置文件需要做个小修改,我顺便关掉了对robot文件的确认
settings.py
ROBOTSTXT_OBEY = FalseITEM_PIPELINES = { 'dangdang.pipelines.DangdangPipeline': 300,}pipeline.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.htmlimport pymysqlclass DangdangPipeline(object): def process_item(self, item, spider): conn=pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='dangdang',use_unicode=True,charset='utf8') for i in range(0,len(item['title'])): title=item['title'][i] link=item['url'][i] comment=item['comment'][i] print(type(title)) print(title) # sql="insert into dd(title,link,comment) values ('"+title+"','"+link+"','"+comment+"')" sql = "insert into dd(title,link,comment) values('" + title + "','" + link + "','" + comment + "')" try: conn.query(sql) except Exception as err: pass conn.close() return item6. 创建数据库和表
我最后的数据要保存到mysql里面,python里面可以通过pymysql进行操作。我提前在mysql命令行界面里面创建了一个数据库和空表
mysql> create database dangdang;mysql> create table dd(id int auto_increment primary, title varchar(100), link varchar(100), comment varchar(32));7. 执行
scrapy crawl dd
如果不想看日志 可以使用
scrapy crawl dd --nolog
8. 检测结果
test.py
#!/usr/bin/env python#! -*- coding:utf-8 -*-# Author: Yuan Liimport pymysqlconn=pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='dangdang',use_unicode=True,charset='utf8')cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#SQL查询cursor.execute("select * from dd")row=cursor.fetchall()for i in row: print(i)conn.close()结果测试成功
文件
数据
爬虫
utf-8
程序
产品
数据库
标题
结构
结果
测试
评论
当当网
成功
互联网
例子
内容
可以通过
名字
命令
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司经营范围
河南云网互联网络科技有限公司
互联网金融 科技
互联网金融监管科技
互联网科技类展会
海南购全球互联网科技
团飞科技与伯堂互联网服务平台
互联网经济与金融科技
米聚互联网科技南京有限公司排面
电子科技大学互联网创业大赛
青海科技产业互联网发展
四川慕妮娅互联网科技有限公司
保险科技服务互联网营销体系
广州互联网高科技取餐柜
山东大美朱楼互联网科技有限公司
国产互联网科技公司
科技互联网公司两年变化
绵阳真晨互联网科技有限公司
河南商务圈互联网科技有限公司
小牛互联网科技有限公司地址
互联网科技工作委员会毛军
狮子座互联网科技
礼当家互联网科技
互联网科技创新企业排名
科技赋能互联网健康
互联网科技产业特征
移动互联网年度科技创新
天津腾达互联网科技有限公司
银行科技岗属于互联网吗
黑云互联网科技有限公司