目标:利用scrapy框架爬取多页当当网商品标题,链接和评论数信息并保存在本地数据库中
首先创建爬虫项目和爬虫模板文件
爬取商品标题
商品链接
商品评论
创建容器容纳他们
查看网页源代码,找到规律
通过ddname定位a标签
a标签下的
title属性的值是商品标题
href属性是链接
文本是评论数
开始网址设置为第一页
设置不遵循robot协议限制
开启pipeline调用DANGdangPipeline
打开数据库并创建对应的表
讲商品信息写进数据库中
完成单页爬虫后开始研究翻页规律
第二页
第三页
根据翻页规律构造出for循环的url地址 用yeild返回参数
最后加上异常处理
完整代码
class DangdangPipeline(object):
def process_item(self, item, spider):
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="root",db="dd")
for i in range(0,len(item["title"]) ):
title=item["title"][i]
link=item["link"][i]
comment=item["comment"][i]
# print(title+",,"+link+",,"+comment)
sql="insert into goods(title,link,comment) values('"+title+"','"+link+"','"+comment+"')"
# print(sql)
try:
conn.query(sql)
except Exception as err:
print(err)
conn.close()
return item
# -*- coding: utf-8 -*-
import scrapy
from dangdang.items import DangdangItem
from scrapy.http import Request
class DdSpider(scrapy.Spider):
name = 'dd'
allowed_domains = ['dangdang.com']
start_urls = ['http://category.dangdang.com/pg1-cid4008154.html']
def parse(self, response):
item=DangdangItem()
item['title']=response.xpath('//a[@dd_name="单品标题"]/@title').extract()
item['link']=response.xpath('//a[@dd_name="单品标题"]/@href').extract()
item['comment']=response.xpath('//a[@dd_name="单品评论"]/text()').extract()
# print(item['title'])
# print(item['comment'])
yield item
for i in range(2,81):
url='http://category.dangdang.com/pg'+str(i)+'-cid4008154.html'
yield Request(url,callback=self.parse)
效果图