实现目标及效果:
可以通过scrapy+Xpath表达式实现爬取当当网商品的标题、评论和商品链接,并能实现自动分页爬取多页商品信息(比如40页的信息),并将爬取到的信息全部写入数据库当中。
由于会用到XPath表达式,在正式开始之前先做简要的用法说明,方便理解。
【补充】XPath与正则表达式的区别:
1.XPath表达式效率会高一点
2.正则表达式功能会强大一些
3.一般来说优先选择XPath,但是XPath解决不了的问题就选择正则表达式来解决。
XPath表达式用法的简单补充
XPath表达式的基础补充
1./ 代表逐层提取
2.text()提取标签下面的文本
E.g.如果提取网页的标题文本:
/html/head/titile/text()
3.//标签名 提取所有的名为**的标签
E.g.提取所有div标签
//div
4.//标签名[@属性=‘属性值’] 提取属性为***的标签
5.@属性名 代表取某个属性
E.g.提取div表情中<div class="tools">标签的内容:
//div[@class='tools']
具体实现步骤
1.创建项目并进入项目目录
scrapy startproject dangdang
#成功执行上述命令后,进入dangdang这个项目目录
cd dangdang
2.创建爬虫文件
scrapy genspider -t basic dd dangdang.com
3.用pycharm打开dangdang这个项目文件夹,然后找到items.py文件,进行编写。
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
class DangdangItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title=scrapy.Field()#存储商品名
link=scrapy.Field()#存储商品链接
comment=scrapy.Field()#存储评论数
在settings.py文件中需要去掉几行注释
# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'dangdang.pipelines.DangdangPipeline': 300,
}
4.编写爬虫文件[在spiders文件下我们刚创建的dd文件就是]
# -*- coding: utf-8 -*-
import scrapy
from dangdang.items import DangdangItem
class DdSpider(scrapy.Spider):
name = 'dd'
allowed_domains = ['dangdang.com']
start_urls = ['http://category.dangdang.com/pg1-cid4008154.html']
#拿到一个网址之后,首先要分析他的特点。可以将某几页的网址复制到粘贴板上然后比较那几个字段值发生了变化,改变哪个字段的值可以实现翻页。在我找的这个网志中,如果修改pg1变为pg10就可以实现从第一页到第十页的效果(其他部分不动)。
def parse(self, response):
item=DangdangItem()
item["title"]=response.xpath("//a[@name='itemlist-picture']/@title").extract()
item["link"]=response.xpath("//a[@name='itemlist-picture']/@href").extract()
item["comment"]=response.xpath(