最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你用scrapy框架爬取豆瓣讀書Top250的書類信息

 更新時(shí)間:2023年03月30日 10:13:24   作者:隨風(fēng)的博客  
這篇文章主要介紹了教你用scrapy框架爬取豆瓣讀書Top250的書類信息,文中提供了解決思路和部分實(shí)現(xiàn)代碼,需要的朋友可以參考下

安裝方法:Windows:在終端輸入命令:pip install scrapy;mac:在終端輸入命令:pip3 install scrapy,按下enter鍵,再輸入cd Python,就能跳轉(zhuǎn)到Python文件夾。接著輸入cd Pythoncode,就能跳轉(zhuǎn)到Python文件夾里的Pythoncode子文件夾。最后輸入一行能幫我們創(chuàng)建Scrapy項(xiàng)目的命令:scrapy startproject douban,douban就是Scrapy項(xiàng)目的名字。按下enter鍵,一個(gè)Scrapy項(xiàng)目就創(chuàng)建成功了。

項(xiàng)目目標(biāo):

爬取豆瓣讀書Top250的書名,出版信息和評分

目標(biāo)url為:https://book.douban.com/top250?start=0
整個(gè)scrapy項(xiàng)目的結(jié)構(gòu),如下圖

在這里插入圖片描述

spiders是放置爬蟲的目錄。我們在spiders這個(gè)文件夾里創(chuàng)建爬蟲文件,我們把這個(gè)文件命名為top250,大部分代碼都需要在這個(gè)top250.py文件里編寫。在top250.py文件里導(dǎo)入我們需要的模塊:import scrapy , bs4
導(dǎo)入scrapy是我們要用創(chuàng)建類的方式寫這個(gè)爬蟲,我們所創(chuàng)建的類將直接繼承scrapy中的scrapy.Spider類。這樣,有許多好用屬性和方法,就能夠直接使用。

在Scrapy中,每個(gè)爬蟲的代碼結(jié)構(gòu)基本都如下所示:

class DoubanSpider(scrapy.Spider): #定義一個(gè)爬蟲類DoubanSpider,DoubanSpider類繼承自scrapy.Spider類。
    name = 'douban'  #定義爬蟲的名字,這個(gè)名字是爬蟲的唯一標(biāo)識。
    allowed_domains = ['book.douban.com']#定義允許爬蟲爬取的網(wǎng)址域名(不需要加https://)。如果網(wǎng)址的域名不在這個(gè)列表里,就會(huì)被過濾掉。allowed_domains就限制了,我們這種關(guān)聯(lián)爬取的URL,一定在book.douban.com這個(gè)域名之下,不會(huì)跳轉(zhuǎn)到某個(gè)奇怪的廣告頁面。
    start_urls = ['https://book.douban.com/top250?start=0']#定義起始網(wǎng)址,就是爬蟲從哪個(gè)網(wǎng)址開始抓取
    
    def parse(self, response):#parse是Scrapy里默認(rèn)處理response的一個(gè)方法,中文是解析。
        print(response.text)
#這里我們并不需要寫類似requests.get()的語句,scrapy框架會(huì)為我們代勞做這件事,寫好你的請求,接下來你就可以直接寫對響應(yīng)如何做處理

每一次,當(dāng)數(shù)據(jù)完成記錄,它會(huì)離開spiders,來到Scrapy Engine(引擎),引擎將它送入Item Pipeline(數(shù)據(jù)管道)處理。定義這個(gè)類的py文件,正是items.py。
如果要爬取豆瓣讀書的書名、出版信息和評分,示例:

在items.py里如何定義數(shù)據(jù):

import scrapy
#導(dǎo)入scrapy
class DoubanItem(scrapy.Item):
#定義一個(gè)類DoubanItem,它繼承自scrapy.Item
    title = scrapy.Field()
    #定義書名的數(shù)據(jù)屬性
    publish = scrapy.Field()
    #定義出版信息的數(shù)據(jù)屬性
    score = scrapy.Field()
    #定義評分的數(shù)據(jù)屬性

scrapy.Field()這行代碼實(shí)現(xiàn)的是,讓數(shù)據(jù)能以類似字典的形式記錄,它輸出的結(jié)果非常像字典,但它卻并不是dict,它的數(shù)據(jù)類型是我們定義的DoubanItem,屬于自定義的Python字典.我們利用類似上述代碼的樣式,去重新寫top250.py

import scrapy
import bs4
from ..items import DoubanItem
# 需要引用DoubanItem,它在items里面。因?yàn)槭莍tems在top250.py的上一級目錄,所以要用..items,這是一個(gè)固定用法。

class DoubanSpider(scrapy.Spider):
#定義一個(gè)爬蟲類DoubanSpider。
    name = 'douban'
    #定義爬蟲的名字為douban。
    allowed_domains = ['book.douban.com']
    #定義爬蟲爬取網(wǎng)址的域名。
    start_urls = []
    #定義起始網(wǎng)址。
    for x in range(3):
        url = 'https://book.douban.com/top250?start=' + str(x * 25)
        start_urls.append(url)
        #把豆瓣Top250圖書的前3頁網(wǎng)址添加進(jìn)start_urls。

    def parse(self, response):
    #parse是默認(rèn)處理response的方法。
        bs = bs4.BeautifulSoup(response.text,'html.parser')
        #用BeautifulSoup解析response。
        datas = bs.find_all('tr',class_="item")
        #用find_all提取<tr class="item">元素,這個(gè)元素里含有書籍信息。
        for data in  datas:
        #遍歷data。
            item = DoubanItem()
            #實(shí)例化DoubanItem這個(gè)類。
            item['title'] = data.find_all('a')[1]['title']
            #提取出書名,并把這個(gè)數(shù)據(jù)放回DoubanItem類的title屬性里。
            item['publish'] = data.find('p',class_='pl').text
            #提取出出版信息,并把這個(gè)數(shù)據(jù)放回DoubanItem類的publish里。
            item['score'] = data.find('span',class_='rating_nums').text
            #提取出評分,并把這個(gè)數(shù)據(jù)放回DoubanItem類的score屬性里。
            print(item['title'])
            #打印書名。
            yield item
            #yield item是把獲得的item傳遞給引擎。

當(dāng)我們每一次,要記錄數(shù)據(jù)的時(shí)候,比如前面在每一個(gè)最小循環(huán)里,都要記錄“書名”,“出版信息”,“評分”。我們會(huì)實(shí)例化一個(gè)item對象,利用這個(gè)對象來記錄數(shù)據(jù)。
每一次,當(dāng)數(shù)據(jù)完成記錄,它會(huì)離開spiders,來到Scrapy Engine(引擎),引擎將它送入Item Pipeline(數(shù)據(jù)管道)處理。這里,要用到y(tǒng)ield語句。
yield語句它有點(diǎn)類似return,不過它和return不同的點(diǎn)在于,它不會(huì)結(jié)束函數(shù),且能多次返回信息。

在這里插入圖片描述

就如同上圖所示:爬蟲(Spiders)會(huì)把豆瓣的10個(gè)網(wǎng)址封裝成requests對象,引擎會(huì)從爬蟲(Spiders)里提取出requests對象,再交給調(diào)度器(Scheduler),讓調(diào)度器把這些requests對象排序處理。然后引擎再把經(jīng)過調(diào)度器處理的requests對象發(fā)給下載器(Downloader),下載器會(huì)立馬按照引擎的命令爬取,并把response返回給引擎。
緊接著引擎就會(huì)把response發(fā)回給爬蟲(Spiders),這時(shí)爬蟲會(huì)啟動(dòng)默認(rèn)的處理response的parse方法,解析和提取出書籍信息的數(shù)據(jù),使用item做記錄,返回給引擎。引擎將它送入Item Pipeline(數(shù)據(jù)管道)處理。

代碼實(shí)操——設(shè)置

點(diǎn)擊settings.py文件,把USER _AGENT的注釋取消(刪除#),然后替換掉user-agent的內(nèi)容,就是修改了請求頭。
因?yàn)镾crapy是遵守robots協(xié)議的,如果是robots協(xié)議禁止爬取的內(nèi)容,Scrapy也會(huì)默認(rèn)不去爬取,所以修改Scrapy中的默認(rèn)設(shè)置。把ROBOTSTXT_OBEY=True改成ROBOTSTXT_OBEY=False,就是把遵守robots協(xié)議換成無需遵從robots協(xié)議,這樣Scrapy就能不受限制地運(yùn)行。

1.

想要運(yùn)行Scrapy有兩種方法,一種是在本地電腦的終端跳轉(zhuǎn)到scrapy項(xiàng)目的文件夾

(跳轉(zhuǎn)方法:cd+文件夾的路徑名如:
cd D:\python\Pythoncode\douban\douban)
然后輸入命令行:scrapy crawl douban(douban 就是我們爬蟲的名字)。)

2.

另一種運(yùn)行方式需要我們在最外層的大文件夾里新建一個(gè)main.py文件(與scrapy.cfg同級)。

然后在這個(gè)main.py文件里,輸入以下代碼,點(diǎn)擊運(yùn)行,Scrapy的程序就會(huì)啟動(dòng)。

from scrapy import cmdline
#導(dǎo)入cmdline模塊,可以實(shí)現(xiàn)控制終端命令行。
cmdline.execute(['scrapy','crawl','douban'])
#用execute()方法,輸入運(yùn)行scrapy的命令。

第1行代碼:在Scrapy中有一個(gè)可以控制終端命令的模塊cmdline。導(dǎo)入了這個(gè)模塊,我們就能操控終端。
第2行代碼:在cmdline模塊中,有一個(gè)execute方法能執(zhí)行終端的命令行,不過這個(gè)方法需要傳入列表的參數(shù)。我們想輸入運(yùn)行Scrapy的代碼scrapy crawl douban,就需要寫成[‘scrapy’,‘crawl’,‘douban’]這樣。
在實(shí)際項(xiàng)目實(shí)戰(zhàn)中,我們應(yīng)該先定義數(shù)據(jù),再寫爬蟲。所以,流程圖應(yīng)如下:

在這里插入圖片描述


最后,存儲(chǔ)數(shù)據(jù)需要修改pipelines.py文件

到此這篇關(guān)于教你用scrapy框架爬取豆瓣讀書Top250的書類信息的文章就介紹到這了,更多相關(guān)scrapy爬取豆瓣書類信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python切片中內(nèi)存的注意事項(xiàng)總結(jié)

    python切片中內(nèi)存的注意事項(xiàng)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python切片中內(nèi)存的注意事項(xiàng)總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-08-08
  • 利用Python制作一個(gè)愚人節(jié)整蠱消息框

    利用Python制作一個(gè)愚人節(jié)整蠱消息框

    又到了一年一度的愚人節(jié)了,本文小編為大家準(zhǔn)備了用Python語言制作的愚人節(jié)整蠱消息框,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-04-04
  • pytorch之關(guān)于PyTorch結(jié)構(gòu)介紹

    pytorch之關(guān)于PyTorch結(jié)構(gòu)介紹

    這篇文章主要介紹了pytorch之關(guān)于PyTorch結(jié)構(gòu)的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Pandas保存csv數(shù)據(jù)的三種方式詳解

    Pandas保存csv數(shù)據(jù)的三種方式詳解

    CSV文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本),是一種通用的、相對簡單的文件格式,被用戶、商業(yè)和科學(xué)廣泛應(yīng)用。本文介紹了三種Pandas保存CSV文件數(shù)據(jù)的方法,需要的可以參考一下
    2022-03-03
  • 解決TensorFlow訓(xùn)練內(nèi)存不斷增長,進(jìn)程被殺死問題

    解決TensorFlow訓(xùn)練內(nèi)存不斷增長,進(jìn)程被殺死問題

    今天小編就為大家分享一篇解決TensorFlow訓(xùn)練內(nèi)存不斷增長,進(jìn)程被殺死問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python 獲取中文字拼音首個(gè)字母的方法

    Python 獲取中文字拼音首個(gè)字母的方法

    今天小編就為大家分享一篇Python 獲取中文字拼音首個(gè)字母的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Django 多對多字段的更新和插入數(shù)據(jù)實(shí)例

    Django 多對多字段的更新和插入數(shù)據(jù)實(shí)例

    這篇文章主要介紹了Django 多對多字段的更新和插入數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python調(diào)用騰訊API進(jìn)行人像動(dòng)漫化效果實(shí)例

    Python調(diào)用騰訊API進(jìn)行人像動(dòng)漫化效果實(shí)例

    最近上網(wǎng)的時(shí)候看到了一個(gè)有趣的東西,叫做人物動(dòng)漫化,嘗試著用python實(shí)現(xiàn)了,所以下面這篇文章主要給大家介紹了關(guān)于Python調(diào)用騰訊API進(jìn)行人像動(dòng)漫化效果的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Python下使用Scrapy爬取網(wǎng)頁內(nèi)容的實(shí)例

    Python下使用Scrapy爬取網(wǎng)頁內(nèi)容的實(shí)例

    今天小編就為大家分享一篇Python下使用Scrapy爬取網(wǎng)頁內(nèi)容的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python人工智能之波士頓房價(jià)數(shù)據(jù)分析

    Python人工智能之波士頓房價(jià)數(shù)據(jù)分析

    買房應(yīng)該是大多數(shù)都會(huì)要面臨的一個(gè)選擇,當(dāng)前經(jīng)濟(jì)和政策背景下,未來房價(jià)會(huì)漲還是跌?這是很多人都關(guān)心的一個(gè)話題。今天分享的這篇文章,以波士頓的房地產(chǎn)市場為例,根據(jù)低收入人群比例、老師學(xué)生數(shù)量等特征,利用 Python 進(jìn)行分析,不求買房但求技術(shù)
    2021-11-11

最新評論

乃东县| 镇坪县| 桃园市| 新绛县| 封开县| 城固县| 紫金县| 平南县| 海口市| 获嘉县| 准格尔旗| 桦川县| 清水县| 枣强县| 甘南县| 景洪市| 新密市| 秦皇岛市| 灵丘县| 屯昌县| 和平区| 盐津县| 开化县| 祥云县| 股票| 安溪县| 鹤山市| 仪陇县| 沽源县| 梁河县| 天柱县| 江永县| 临高县| 太湖县| 寿宁县| 勃利县| 海原县| 栾城县| 平谷区| 嘉峪关市| 乐都县|