我的第一个Scrapy 程序 - 爬取当当网信息
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,前面已经安装了Scrapy,下面来实现第一个测试程序。概述Scrapy是一个爬虫框架,他的基本流程如下所示(下面截图来自互联网)简单的说,我们需要写一个item文件,定义返回的数据结构;写一个spid
千家信息网最后更新 2025年01月22日我的第一个Scrapy 程序 - 爬取当当网信息
前面已经安装了Scrapy,下面来实现第一个测试程序。
概述
Scrapy是一个爬虫框架,他的基本流程如下所示(下面截图来自互联网)
简单的说,我们需要写一个item文件,定义返回的数据结构;写一个spider文件,具体爬取的数据程序,以及一个管道 pipeline 文件,作为后续操作,比如保存数据等等。
下面以当当网为例,看看怎么实现。
这个例子里面我想爬取的内容是前面20页的羽绒服产品,包括产品名字,链接和评论数。
过程
1. 创建一个Scrapy的项目
scrapy startproject dangdang
2. 创建一个爬虫文件**
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 item
6. 创建数据库和表
我最后的数据要保存到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安全错误
数据库的锁怎样保障安全
电子白板软件开发技术
商城系统数据库er图
无线网络技术的图片
怎样提取网页表格数据库
access2007数据库
文件服务器应该怎么备份
网络安全工作培训总结
roblox如何启用私人服务器
软件开发一般出差是做什么
编办网络安全现状
零基础软件开发先学什么
郑州豪科软件开发
服务器安全狗打开了不能远程
保障孩子的网络安全
阿里云我的世界服务器
服务器桌面管理
阴阳师2018年服务器
网络安全法题库怎么答题
网络安全反黑
迅盈网络技术有限公司
无线网络技术的图片
数据库管理技术指什么
四川宜宾网络安全吗
2021年重庆网络安全宣传周
电脑服务器维护权益
服务器配置正常却显示无网络
页面连接数据库升级
中山点餐软件开发
小程序 云函数操作云数据库
下列哪个不属于数据库系统软件