scrapy入门_2爬取豆瓣军事类图书(1)

前言

上回讲到如何安装scrapy(作为参考),本回将参照文档编写一个爬取豆瓣评分在8.9以上的军事类图书。

新建项目

打开Anaconda Prompt-->定位到新建的项目目录(上回讲到的scrapytest)-->通过命令venv\Scripts\activate激活虚拟环境-->通过scrapy startproject doubanbook命令创建scrapy项目
创建scrapy项目

创建成功后,按照提示-->cd doubanbook-->scrapy gensiper dbbook https://book.douban.com/tag/军事
生成名为dbbook的爬虫

说明:dbbook是生成爬虫的名字,https://book.douban.com/tag/军事为豆瓣读书军事类url,该url作为爬虫的起始url。

成功后,查看spiders目录下,多了dbbook.py文件,打开查看类似如下
图片描述

至此,scrapy项目就创建成功啦!

代码编写

打开dbbook.py(我用的Notepad++)-->修改parse方法-->保存

def parse(self, response):
    #respone是TextResponse的实例,而TextResponse又是Response的子类,相关说明请查看https://doc.scrapy.org/en/latest/topics/request-response.html#scrapy.http.TextResponse和https://doc.scrapy.org/en/latest/topics/request-response.html#scrapy.http.Response
    print("++++++++响应的url是:",response.url)

在命令提示中继续输入scrapy crawl dbbook运行爬虫
运行dbbook爬虫

但是!没有发现打印出来关于"++++++++响应的url是"的东西,却是什么403之类的

打开doubanbook目录下的settings.py-->找到USER_AGENT,修改为
USER_AGENT = 'doubanbook (+https://www.douban.com/)'
在命令提示符中重新输入scrapy crawl dbbook可成功运行爬虫
成功输出响应的url

接下来就可以安心编写解析程序了,修改parse方法,因为该方法是爬虫接受相应后默认的回调方法
文档教程中,用css()解析response,因为之前未接触过xpath,所以打算用xpath()实现解析
tips:其实css()xpath()TextResponse.selector.css(query)TextResponse.selector.xpath(query)的简写形式

def parse(self, response):
    # print("+++++++++响应的url是:",response.url)
    #每本书的列表
    booklist = response.xpath('//li[@class="subject-item"]')
    #遍历每本书
    for book in booklist:
        #书的图片地址
        imgsrc = book.xpath('div[@class="pic"]//img/@src').extract()[0]
        #书的其他信息
        info = book.xpath('div[@class="info"]')
        #书名
        title = info.xpath('h2/a/text()').extract()[0].replace('\n','').replace(' ','')
        #作者
        author = info.xpath('div[@class="pub"]/text()').extract()[0].split('/')[0].replace('\n','').replace(' ','')
        #评分
        #有些评论数较少的书籍,可能没有评分
        rate = info.xpath('div[@class="star clearfix"]/span[@class="rating_nums"]/text()').extract_first()
        if rate is not None:
            rate = float(rate)
            if(rate >= 8.9):
             yield{
                'title':title,
                 'author':author,
                'rate':rate,
                'imgsrc':imgsrc
             }
             

保存后,根据文档将结果保存到json文件中-->命令提示符中输入scrapy crawl dbbook -o junshibook89.json-->回车运行
运行完成后,若无什么错误,打开最外层doubanbook目录,查看多了一个junshibook89.json文件,打开后可是中文字符都是类似\u4eae\u5251的编码,这是什么?肿么回事?怎么办?

转码

是什么:\u4eae\u5251看起来像Unicode,找了一个在线编码转换网站,证实了自己的想法,这两个字符其实代表的是”亮剑“
肿么回事:其实并不是什么错误结果,只是在存储到文件的时候,存放的是unicode,不管是什么只要代表的东西是对的就行了
怎么办:虽然无伤大雅,但是看起来总是别扭的,怎样把unicode表示的中文显示成中文呢?需要修改前面提到过的settings.py文件,在该文件中添加FEED_EXPORT_ENCODING = 'utf-8'就行啦

命令提示符中输入scrapy crawl dbbook -o junshibook89-2.json-->回车运行,查看结果是否显示中文了

总结

至此,初步爬取豆瓣评分咋8.9以上的军事类图书完成了,但是只是爬取了第一页中的内容,下篇抓取剩余页面的内容

好的,以下是一个简单的使用Scrapy爬取豆瓣电影的脚本: 首先,创建一个Scrapy项目: ``` scrapy startproject douban_movie ``` 然后,在项目的根目录下创建一个名为douban_movie_spider.py的爬虫文件。在该文件中,编写如下代码: ```python import scrapy class DoubanMovieSpider(scrapy.Spider): name = 'douban_movie' allowed_domains = ['movie.douban.com'] start_urls = ['https://movie.douban.com/top250'] def parse(self, response): for movie in response.xpath('//div[@class="hd"]'): yield {'title': movie.xpath('a/span[@class="title"]/text()').extract_first()} next_page = response.xpath('//span[@class="next"]/a/@href').extract_first() if next_page: yield scrapy.Request(response.urljoin(next_page), callback=self.parse) ``` 在这个爬虫中,我们首先定义了一个名为DoubanMovieSpider的类,它继承自Scrapy的Spider类。我们设置了一些属性,包括name(爬虫的名称)、allowed_domains(允许爬取的域名)和start_urls(起始URL)。 在parse()方法中,我们使用XPath表达式来提取每部电影的标题,并将其作为一个字典的值返回。我们还使用XPath表达式来提取下一页的URL,并使用Scrapy的Request对象获取该URL并继续调用parse()方法。 最后,我们需要在命令行中运行以下命令来启动这个爬虫: ``` scrapy crawl douban_movie -o movies.json ``` 这个命令将使用我们刚刚编写的爬虫爬取豆瓣电影Top250,并将结果保存为JSON文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值