我的第一个Scrapy程序,爬取当当网信息

  

前面已经安装了Scrapy、下面来实现第一个测试程序。

  

概述

  

Scrapy是一个爬虫框架,他的基本流程如下所示(下面截图来自互联网)

  

我的第一个Scrapy程序,爬取当当网信息

  

简单的说,我们需要写一个项目文件,定义返回的数据结构;写一个蜘蛛文件,具体爬取的数据程序,以及一个管道管道文件,作为后续操作,比如保存数据等等。

  

下面以当当网为例,看看怎么实现。
这个例子里面我想爬取的内容是前面20页的羽绒服产品,包括产品名字,链接和评论数。

  

过程

  

1。创建一个Scrapy的项目

  
 <代码> scrapy startproject当当网 
  

2。创建一个爬虫文件* *

  

<代码> scrapy genspider - t基本dd dangdang.com

  

这样他会自动创建一个爬虫文件,结构如下所示:
我的第一个Scrapy程序,爬取当当网信息

  

3。编写items.py

  

items.py   

 <代码> # - * -编码:utf - 8 - *
  
  #定义这里刮的模型项
  #
  #看文档:
  # https://doc.scrapy.org/en/latest/topics/items.html
  
  进口scrapy
  
  类DangdangItem (scrapy.Item):
  #这里定义的字段项:
  # name=scrapy.Field ()
  
  title=scrapy.Field ()
  url=scrapy.Field ()
  评论=scrapy.Field ()
   
  

4。编写爬虫文件dd.py

  

前面第二步已经自动生成了一个模板,我们直接修改就行。
dd.py

  
 <代码> # - * -编码:utf - 8 - *
  
  进口scrapy
  从当当网。项目导入DangdangItem
  从scrapy。http导入请求
  
  类DdSpider (scrapy.Spider):
  name=艿堋?
  allowed_domains=(“dangdang.com”)
  start_urls=(“http://category.dangdang.com/pg1-cid4010275.html”)
  
  def解析(自我,反应):
  
  项=DangdangItem ()
  项['标题']=response.xpath (u”//[@dd_name=暗テ繁晏狻?/text ()”) .extract ()
  项目(“url”)=response.xpath (“//[@dd_name=暗テ繁晏狻?/@href”) .extract ()
  项目(“评论”)=response.xpath (“//[@dd_name=暗テ菲缆邸?/text ()”) .extract ()
  文本=response.body
  # content_type=chardet.detect(文本)
  #如果content_type(“编码”)!=皍tf - 8”:
  #文本=text.decode (content_type[“编码”])
  #=text.encode文本(“utf - 8”)
  #打印(文本)
  
  收益项
  
  因为我在范围(20):
  url=' http://category.dangdang.com/pg%d-cid4010275.html ' %我
  收益率请求(url,回调=self.parse)  
  

5。编写pipelines.py

  

为了使用管道、配置文件需要做个小修改,我顺便关掉了对机器人文件的确认
settings.py

  
 <代码> ROBOTSTXT_OBEY=False
  
  ITEM_PIPELINES={
  “dangdang.pipelines。DangdangPipeline”: 300年,
  } 
  

pipeline.py   

 <代码> # - * -编码:utf - 8 - *
  
  #定义项目管道
  #
  #别忘了管道添加到ITEM_PIPELINES设置
  #见:https://doc.scrapy.org/en/latest/topics/item-pipeline.html
  进口pymysql
  
  类DangdangPipeline(对象):
  def process_item(自我,物品,蜘蛛):
  康涅狄格州=pymysql.connect(主机=127.0.0.1,用户=?passwd=?db=暗钡蓖?use_unicode=True, charset=' use utf8)
  因为我在范围(0,len(项目['标题'])):
  title=项目['标题'][我]
  链接=项目(“url”)[我]
  评论=项目(“评论”)[我]
  
  print(类型(标题))
  打印(标题)
  # sql="插入dd(标题、链接、评论)值(+名称+“,”“+链接+”、“+ +评论”)”
  sql="插入dd(标题、链接、评论)值(+名称+“,”“+链接+”、“+ +评论”)”
  试一试:
  conn.query (sql)
  除了例外犯错:
  通过
  conn.close ()
  
  返回项目 
  

6。创建数据库和表

  

我最后的数据要保存到mysql里面,python里面可以通过pymysql进行操作。我提前在mysql命令行界面里面创建了一个数据库和空表

  
 <代码> mysql>创建数据库当当网;
  mysql>创建表dd (int id auto_increment初级、标题varchar(100),链接varchar(100),评论varchar(32);  
  

7。执行

  

scrapy爬dd
如果不想看日志可以使用
scrapy爬dd - nolog

  

8。检测结果

我的第一个Scrapy程序,爬取当当网信息