用Scrapy爬取当当网书籍信息

用Scrapy爬取当当网书籍信息

日期:2019-04-23 23:27:34 星期二

项目流程

  • 确定项目目标
  • 创建Scrapy项目
  • 定义Item(数据)
  • 创建和编写Spider文件
  • 修改Settings.py文件
  • 运行Scrapy爬虫

确定项目目标

今天通过创建一个爬取当当网2018年图书销售榜单的项目来认识一下Scrapy的工作流程

当当链接: "http://bang.dangdang.com/books/bestsellers/01.54.00.00.00.00-year-2018-0-1-1 "

目标:

  • 爬取前3页的数据
  • 爬取字段:图书名、作者和价格

创建Scrapy项目

首先要安装scrapy这个库,但这个安装很麻烦,很容易掉坑

我这里是用anaconda下载的,这种方式很方便

下载命令:pip install scrapy

用cmd命令打开命令行窗口,输入以下命令:

scrapy startproject dangdang

dangdang是项目的名称

到这里就创建好了我们的dangdang项目

定义Item数据

打开items.py文件,并添加以下内容:

代码语言:javascript
复制
import scrapy
class DangdangItem(scrapy.Item): #继承scrapy.Item类 
    name = scrapy.Field() #定义数据属性
    author = scrapy.Field()
    price = scrapy.Field()

创建和编写Spider文件

在spiders文件夹里面新建一个spider.py(自己命名的),编写爬去代码。 代码如下:

代码语言:javascript
复制
import scrapy
from bs4 import BeautifulSoup
from ..items import DangdangItem
#..代表上层目录,因为现在spider文件夹,item在上层目录,然后导入DangdangItem模块
class DangdangSpider(scrapy.Spider):
#括号里需要有scrapy.Spider这个基类,这个基类里面包含很多属性和方法供我们使用
    name = "dangdang" #项目名字,待会运行爬虫时要用到
    allow_domains = ["http://bang.dangdang.com"] 
    #允许爬取的域名,可以准确定位,防止跳到其它广告
    start_urls = [] 
    for num in range(1,4): #获取前三页的链接
        url = f"http://bang.dangdang.com/books/bestsellers/01.54.00.00.00.00-year-2018-0-1-{num}"
        start_urls.append(url)
def parse(self,reponse): #解析并提取数据的函数
    soup = BeautifulSoup(reponse.text,"html.parser")
    tag_ul = soup.find("ul",class_="bang_list clearfix bang_list_mode")
    tags_li = tag_ul.find_all("li")
    for tag in tags_li:
        item = DangdangItem() #创建一个item对象,用来处理和传输数据
        item["name"] =tag.find("div",class_="name").find("a").text
        item["author"]=tag.find("div",class_="publisher_info").find("a").text 
        item["price"] = tag.find("span",class_="price_n").text
        print(item["name"])
        print("="*40)
        yield item

**修改Settings.py文件 **

爬虫已经写好后还需要去settings.py文件里面修改一些内容

代码语言:javascript
复制
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' #伪装爬虫

ROBOTSTXT_OBEY = False
#有些网站的robots.txt规定是不允许爬取的,设置为True,scrapy就可以无视这个规定

运行Scrapy文件

用cmd打开命令窗口,输入以下命令即可开始运行程序

scrapy crawl dangdang

本文还没有对数据进行存储,如果需要如何存储数据,可以加我私聊