<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          基于Scrapy框架的微博評論爬蟲實戰(zhàn)

          共 2859字,需瀏覽 6分鐘

           ·

          2021-11-13 18:24


          之前志斌寫過的微博爬蟲是基于Requests的,今天來跟大家分享一下,基于Scrapy的微博爬蟲應(yīng)該怎么寫。


          之前分享過一個Requests對微博評論的爬蟲,已經(jīng)對頁面進(jìn)行了全面的分析,本文主要注重對數(shù)據(jù)采集、存儲和文件配置進(jìn)行分析講解。


          01

          Scrapy簡介


          首先,我們需要對Scrapy框架有一個簡單的了解,不然在你書寫代碼的時候會非常的麻煩。


          01

          ?安裝


          使用pip對Scrapy進(jìn)行安裝,代碼如下:

          pip install scrapy


          02

          ?創(chuàng)建項目


          安裝好Scrapy框架之后,我們需要通過終端,來創(chuàng)建一個Scrapy項目,命令如下:

          scrapy startproject weibo


          創(chuàng)建好后的項目結(jié)構(gòu),如下圖:

          6b10cbde2cae0bd9dd39fc0017faf723.webp


          這里我們來簡單介紹一下結(jié)構(gòu)中我們用到的部分的作用,有助于我們后面書寫代碼。

          spiders是存放爬蟲程序的文件夾,將寫好的爬蟲程序放到該文件夾中。items用來定義數(shù)據(jù),類似于字典的功能。settings是設(shè)置文件,包含爬蟲項目的設(shè)置信息。pipelines用來對items中的數(shù)據(jù)進(jìn)行進(jìn)一步處理,如:清洗、存儲等。


          02

          數(shù)據(jù)采集


          經(jīng)過上面的簡單介紹,我們現(xiàn)在對Scrapy框架有了簡單的了解,下面我們開始寫數(shù)據(jù)采集部分的代碼。


          01

          ?定義數(shù)據(jù)


          首先,我們對數(shù)據(jù)存儲的網(wǎng)頁進(jìn)行觀察,方便我們對獲取數(shù)據(jù)進(jìn)行定義

          75023187589f3abf4995c45f73670d5c.webp

          通過對網(wǎng)頁中數(shù)據(jù)存儲的形式進(jìn)行觀察后,items.py中對數(shù)據(jù)的定義方式為:

          data = scrapy.Field()


          02

          ?編輯爬蟲


          接下來我們在spiders文件夾里面創(chuàng)建一個weibo.py爬蟲程序用以書寫請求的爬蟲代碼

          8f2757fc8d839a95853d9c8de999ab79.webp

          代碼如下:

          import scrapy
          class WeiboSpider(scrapy.Spider):
          name = 'weibo' #用于啟動微博程序
          allowed_domains = ['m.weibo.cn'] #定義爬蟲爬取網(wǎng)站的域名
          start_urls = ['https://m.weibo.cn/comments/hotflow?id=4700480024348767&mid=4700480024348767&max_id_type=0'] #定義起始網(wǎng)頁的網(wǎng)址
          for i in res['data']['data']:
          weibo_item = WeiboItem()
          weibo_item['data'] = re.sub(r'<[^>]*>', '', i['text'])
          # start_url = ['https://m.weibo.cn/comments/hotflow?id=4700480024348767&mid=4700480024348767&'+str(max_id)+'&max_id_type=0']
          yield weibo_item #將數(shù)據(jù)回傳給items


          03

          ?遍歷爬取


          學(xué)過Requests對微博評論進(jìn)行爬蟲的朋友應(yīng)該知道,微博評論的URL構(gòu)造方式,這里我直接展示構(gòu)造代碼:

          max_id_type = res['data']['max_id_type']
          if int(max_id_type) == 1:
          new_url = 'https://m.weibo.cn/comments/hotflow?id=4700480024348767&mid=4700480024348767&max_id=' + str(
          max_id) + '&max_id_type=1'
          else:
          new_url = 'https://m.weibo.cn/comments/hotflow?id=4700480024348767&mid=4700480024348767&max_id=' + str(
          max_id) + '&max_id_type=0'


          02

          數(shù)據(jù)存儲


          光爬取下來數(shù)據(jù)是不行的,我們還需要對數(shù)據(jù)進(jìn)行存儲,這里我采用的是csv文件,來對評論數(shù)據(jù)進(jìn)行存儲,代碼如下:

          class CsvItemExporterPipeline(object):
          def __init__(self):
          # 創(chuàng)建接收文件,初始化exporter屬性
          self.file = open('text.csv','ab')
          self.exporter = CsvItemExporter(self.file,fields_to_export=['data'])
          self.exporter.start_exporting()


          03

          程序配置


          光寫上面的代碼是無法爬取到評論的,因為我們還沒有對整個程序進(jìn)行有效的配置,下面我們就在settings.py里面進(jìn)行配置。


          01

          ?不遵循robots協(xié)議


          需要對robts協(xié)議的遵守進(jìn)行修改,如果我們遵循網(wǎng)頁的robots協(xié)議的話,那無法進(jìn)行爬取,代碼如下:

          # Obey robots.txt rules
          ROBOTSTXT_OBEY = False


          02

          ?使用自定義cookie


          我們知道,想要爬取微博評論,需要帶上自己的cookie用以信息校驗,因為我們的cookie是在headers中包裹著的,所以我們需要將COOKIES_ENABLED改為False,代碼如下:

          # Disable cookies (enabled by default)
          COOKIES_ENABLED = False


          03

          ?打開管道


          想要進(jìn)行數(shù)據(jù)存儲,還需要在配置中,打開通道,用以數(shù)據(jù)傳輸,代碼如下:

          # Configure item pipelines
          # See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
          ITEM_PIPELINES = {
          'weibo.pipelines.CsvItemExporterPipeline': 1,
          'weibo.pipelines.WeiboPipeline': 300,
          }


          04

          啟動程序


          我們在spiders同級的的目錄下創(chuàng)建一個wb_main.py文件,便于我們在編輯器中啟動程序,代碼如下:

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


          05

          總結(jié)


          1. 本文詳細(xì)的介紹了,如何用Scrapy框架來對微博評論進(jìn)行爬取,建議大家動手實操一下,便于理解。

          2. 本文僅供學(xué)習(xí)參考,不做它用。


          PS公號內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起?100 天計劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點一下,如果感覺文章內(nèi)容不錯的話,記得分享朋友圈讓更多的人知道!

          65eed033fed8fd472d46676436055363.webp

          神秘禮包獲取方式

          識別文末二維碼,回復(fù):1024

          瀏覽 90
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲爱爱视频 | 青青草成人视频在线播放 | 久久系列 | 日韩欧美国产一级片 | 国内精品国产成人国产三级 |