Python入门学习记录04--Scrapy爬取豆瓣Top250图书(可翻页)

Python入门学习记录04–Scrapy爬取豆瓣Top250图书(可翻页)

第一步 安装Scrapy

(1)国内镜像源加速

#终端输入
pip  install scrapy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

(2)安装快结束会提示twisted无法安装
点击这里下载twisted
找到twisted 下载对应版本到本地
然后执行(这是我的版本,根据情况变动)

#下载安装目录下输入
pip install Twisted‑20.3.0‑cp38‑cp38‑win_amd64.whl

第二步 新建项目

#打开终端执行

scrapy startproject ZYP_Scarpy(文件名)

第三步 新建.py主文件

#在所创建的目录下运行cmd

scrapy genspider DouBanBook.py(文件名)

第四步 改动settings.py

将遵守君子协议改为“否”
将请求User-Agent改为浏览器地址

ROBOTSTXT_OBEY = False

DEFAULT_REQUEST_HEADERS = {
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
  'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36 Edg/85.0.564.44'
}

第四步 编写DouBanBook.py

import scrapy
a=[]
for i in range(10):
    a.append('https://book.douban.com/top250?start='+str(i*25))


class DoubanbookSpider(scrapy.Spider):
    name = 'DouBanBook'     #爬虫的名字,这是唯一的,不能和项目名称重复
    allowed_domains = ['douban.com']    #可以限制不要爬出界
    start_urls = a      #起始的request

    def parse(self, response):  #response 是爬取过后返回回来的数据
        #print(response.body())
        books = response.xpath('//div[contains(@class,"indent")]/table//tr[contains(@class,"item")]')
        for book in books:
            book_name = book.xpath('td[2]//a/@title').extract()
            book_info = book.xpath('td[2]//p[@class="pl"]/text()').extract()
            book_pingfen = book.xpath('td[2]//div[contains(@class,"clearfix")]/span[2]/text()').extract()
            book_quote = book.xpath('td[2]//p[@class="quote"]/span/text()').extract()
            #print(book_name)
            yield{
                "book_name":book_name,
                "book_info":book_info,
                "book_pingfen" :book_pingfen,
                "book_quote": book_quote
            }
        pass

第五步 爬取数据

#最后在项目下运行cmd

scrapy crawl DouBanBook(文件名)

运行部分截图
在这里插入图片描述

Over!

猜你喜欢

转载自blog.csdn.net/weixin_45619006/article/details/108456776