scrapy入門_2爬取豆瓣軍事類圖書(1)

前言

上回講到如何安裝scrapy(做爲參考),本回將參照文檔編寫一個爬取豆瓣評分在8.9以上的軍事類圖書。css

新建項目

打開Anaconda Prompt-->定位到新建的項目目錄(上回講到的scrapytest)-->經過命令venv\Scripts\activate激活虛擬環境-->經過scrapy startproject doubanbook命令建立scrapy項目
建立scrapy項目html

建立成功後,按照提示-->cd doubanbook-->scrapy gensiper dbbook https://book.douban.com/tag/軍事
生成名爲dbbook的爬蟲json

說明:dbbook是生成爬蟲的名字,https://book.douban.com/tag/軍事爲豆瓣讀書軍事類url,該url做爲爬蟲的起始url。scrapy

成功後,查看spiders目錄下,多了dbbook.py文件,打開查看相似以下
圖片描述ide

至此,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

可是!沒有發現打印出來關於"++++++++響應的url是"的東西,倒是什麼403之類的spa

打開doubanbook目錄下的settings.py-->找到USER_AGENT,修改成
USER_AGENT = 'doubanbook (+https://www.douban.com/)'
在命令提示符中從新輸入scrapy crawl dbbook可成功運行爬蟲
成功輸出響應的urlcode

接下來就能夠安心編寫解析程序了,修改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以上的軍事類圖書完成了,可是隻是爬取了第一頁中的內容,下篇抓取剩餘頁面的內容

相關文章
相關標籤/搜索