我的第一个Scrapy 程序 - 爬取当当网信息
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,前面已经安装了Scrapy,下面来实现第一个测试程序。概述Scrapy是一个爬虫框架,他的基本流程如下所示(下面截图来自互联网)简单的说,我们需要写一个item文件,定义返回的数据结构;写一个spid
千家信息网最后更新 2024年11月24日我的第一个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安全错误
数据库的锁怎样保障安全
广西通信管理局网络安全部电话
网络安全值班管理制度
西亚斯网络安全实验室
中型软件开发证书
万普网络技术有限公司
258搜索软件开发
二级建造师国家数据库
高改a车数据库
网络技术常用于a时间控制
江苏自动化审批管控软件开发平台
软件开发转让协议版本
cf哪个服务器可以建密码房
ubuntu服务器
vaadin连接数据库
双路服务器 内存不均衡
orcla数据库脚本
济南数据库培训多少钱
小程序网络安全等级保护备案
长沙尚腾互联网科技有限公司
大话西游服务器名字
fda 专利数据库
无法配置服务器远程管理
苏州机架式服务器报价
bjca 证书管理服务器
r筛选数据框中的数据库
陆丰管理软件开发
北京晟至互联网科技
论文中的数据库逻辑设计
优步服务器
数据库春考技能操作题