国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Scrapy框架的微博用戶信息采集系統(tǒng)設計與實現

2024-01-27 08:12朱燁行
現代信息科技 2023年24期
關鍵詞:網絡爬蟲微博

朱燁行 等

趙寶瑩? 張明杰? 魏笑笑? 衛(wèi)昆

摘? 要:為深入了解新浪微博用戶的有關情況,從中找出最有影響力的微博用戶,發(fā)現當前新浪微博中的意見領袖,需要知道每位微博用戶迄今為止已發(fā)表的微博數、關注數和粉絲數等信息。為此使用Python語言設計實現了一個基于Scrapy框架的網絡爬蟲,該爬蟲根據輸入的微博用戶標識號ID抓取該用戶目前已發(fā)表的微博數、關注數和粉絲數等信息。由于要連續(xù)多次訪問微博網站,為了不讓微博網站拒絕訪問,在設計的爬蟲中使用了用戶代理和IP代理,其中IP代理選用隧道代理這一動態(tài)類型。實驗結果表明下載七千多位微博用戶的信息用時6小時22分鐘。

關鍵詞:Scrapy;網絡爬蟲;微博;用戶代理;IP代理

中圖分類號:TP311.1? ? 文獻標識碼:A? 文章編號:2096-4706(2023)24-0041-05

Design and Implementation of Weibo User Information Collection System

Based on Scrapy Framework

ZHU Yehang1, ZHAO Baoying2, ZHANG Mingjie3, WEI Xiaoxiao1, WEI Kun3

(1.School of Modern Post, Xi'an University of Posts and Telecommunications, Xi'an? 710121, China;

2.Information Technology Center, Luoyang Institute of Science and Technology, Luoyang? 471023, China;

3.College of Economics and Management, Xi'an University of Posts and Telecommunications, Xi'an? 710121, China)

Abstract: To gain a deeper understanding of Sina Weibo users' information, from which to identify the most influential Weibo users, discover opinion leaders on current Sina Weibo, it is necessary to know the number of Weibo posts, followers and fans of every Weibo user so far. To this end, a Web crawler based on the Scrapy framework is designed and implemented in Python language. The crawler captures the number of Weibo posts, followers, fans published by the user according to the Weibo user ID entered. We have to visit Weibo website for many times in succession, to prevent Weibo website from denying access, the User Agent and IP Proxy are used in the designed crawler. Among them, the IP proxy selects the dynamic type of tunnel proxy. The experimental results show that it takes 6 hours and 22 minutes to download the information of more than 7 000 Weibo users.

Keywords: Scrapy; Web crawler; Weibo; User Agent; IP Proxy

0? 引? 言

新浪微博又名“微博”,于2009年上線,是一個中國的社交媒體平臺,截至2023年5月,其月活躍用戶為5.86億,日活躍用戶為2.52億[1]??赏ㄟ^個人計算機、手機等設備接入該平臺,通過文字、圖片、視頻等方式,實現信息互動傳播、即時分享。

本文所說的微博用戶信息指的是微博用戶當前已發(fā)表的微博數、關注數和粉絲數,這些數據對刻畫微博用戶很有幫助,可用于確定微博用戶影響力、找出意見領袖等方面[2]。

1? 相關技術及原理

1.1? 網絡爬蟲

網絡爬蟲是按規(guī)則自動抓取Web網上數據的程序。主要由控制器、解析器、資源庫等組成??刂破魃暾堃粋€線程調用爬蟲獲取網頁內容。解析器下載網頁,過濾并分析其中的數據。資源庫存儲下載的數據[3]。

首先給出一組統(tǒng)一資源定位符(URL)值作為種子,網絡爬蟲依次訪問其中的每一個URL值,下載相應網頁,找到在這些網頁中的URL鏈接地址并據此下載新的網頁,在新的網頁中找新的URL鏈接地址并下載對應的網頁,這樣循環(huán)下去,直到相關網頁抓完為止[4]。

1.2? 網絡爬蟲框架Scrapy

框架就是半成品,集成很多功能、具有較強通用性的項目模板。Scrapy是用Python寫的一個Web抓取框架,其中的引擎、調度器不需要用戶編寫,而其中的Spiders、Item Pipeline需要用戶編寫。Scrapy是為網頁抓取而設計,也可用于通用的網絡爬蟲[3]。

2? 系統(tǒng)設計

2.1? 具體實現流程

2.1.1? 安裝Scrapy

在操作系統(tǒng)Windows 7下安裝Scrapy的方法是先安裝好Python,在命令行模式下使用pip命令即可安裝:pip install scrapy[4]。

2.1.2? 創(chuàng)建Scrapy工程

在命令行模式下進入現有的任一目錄,如“>cd G:\gzhuyehang\scrapyProject”,運行命令“>scrapy startproject zSinaUser”。即可創(chuàng)建Scrapy工程zSinaUser,并在當前已存在目錄下新生成目錄zSinaUser,在它下面生成配置文件scrapy.cfg和另外一個名稱同為zSinaUser的目錄,在第二個zSinaUser目錄下生成一個目錄spiders和四個文件items.py、middlewares.py、pipelines.py、settings.py[5]。

2.1.3? 創(chuàng)建一個爬蟲文件

在命令行模式下進入目錄“>cd G:\gzhuyehang\scrapyProject\zSinaUser”,運行如下命令:

>scrapy genspider userInfoSpider weibo.cn。使用scrapy genspider命令在目錄spiders下創(chuàng)建一個名字為userInfoSpider.py的文件,這個文件搜索的域為weibo.cn,之所以選weibo.cn而不選weibo.com,是因為weibo.cn中頁面較簡單而且反爬蟲措施較弱[5]。

2.2? 有關文件分析

本文設計實現的Scrapy框架爬蟲最終文件目錄結構如圖1所示。下面對其中各有關文件進行分析。

2.2.1? 文件userInfoSpider.py

該文件用于從輸入文件中讀取用戶標識號ID,并向微博網站發(fā)起請求,從網站返回內容中提取相應用戶已發(fā)表的微博數、關注數和粉絲數,并把這些數據返回給Scrapy引擎[6]。

該文件包含一個類class UserinfospiderSpider(scrapy.Spider),其中包含有兩個函數:start_requests和parse_user,分別介紹如下:

1)函數start_requests(self)。該函數從輸入文件z0420userid.txt中每次讀入一行內容,這行內容是一個微博用戶的標識號ID,用該ID號形成該用戶的微博主頁地址,調用函數Request訪問該網頁。如此反復直到讀完該文件中所有行的內容為止[7]。

2)函數parse_user(self, response)。其中的參數response是讀取某一位微博用戶主頁的返回內容,從中提取出該微博用戶標識號ID、微博數、關注數、粉絲數共四個屬性數據,組成item項并返回給Scrapy引擎[7]。

2.2.2? 文件customUserAgent.py

這是用戶代理隨機挑選文件,在zmiddlewares目錄下,用于從文件resource.py中的列表UserAgents中隨機挑選一個瀏覽器的名稱,并把它設置為當前缺省的用戶代理[8]。

2.2.3? 文件resource.py

該文件是用戶代理列表文件,在zmiddlewares目錄下,在其中定義列表UserAgents,該列表中存放的是30個不同的瀏覽器的名稱[9]。

2.2.4? 文件items.py

該文件定義要爬取的數據項。

2.2.5? 文件middlewares.py

該文件中的類class ProxyDownloaderMiddleware,用來設置隧道代理服務器的域名、端口號、用戶名、密碼等[10]。

2.2.6? 文件pipelines.py

該文件輸出文本文件“z0421test.txt”,每行的四個數分別表示用戶標識號ID,該用戶已發(fā)表的微博數、關注數和粉絲數等。

2.2.7? 文件settings.py

該文件是配置文件,給出了一些參數的值。

1)DOWNLOAD_DELAY = 6,代表爬蟲訪問完一個頁面再訪問下一個頁面時需要等待的時間間隔。如果間隔時間太短,網站會發(fā)現是爬蟲在訪問網站,從而拒絕訪問。

2)COOKIES_ENABLED = False,設置為不用cookies。如果使能cookies,則微博網站會發(fā)現每次是同一個用戶在訪問該網站,從而拒絕訪問。

3)程序如何輸出。如下結構中的內容表明使用項目zSinaUser中文件pipelines.py中的類class ZsinauserPipeline來輸出:

ITEM_PIPELINES = {'zSinaUser.pipelines.ZsinauserPipeline': 300,}

4)ROBOTSTXT_OBEY = False:表示爬取內容不符合robots協議時仍要爬取[11]。

2.2.8? 文件begin.py

調試運行程序時文件begin.py應用說明如下:

1)在Python的集成開發(fā)環(huán)境PyCharm中,為了避免每一次運行或調試程序都輸入一串命令,可以在工程目錄“>cd G:\gzhuyehang\scrapyProject\zSinaUser”下創(chuàng)建一個文件,名字可為begin.py,也可命名為其他名字。在PyCharm的運行選項配置中寫入該文件名字,這樣每次點擊運行菜單命令時就會首先運行該文件的腳本,從而啟動該爬蟲工作,下載網站上的相關數據[12]。該文件內容如下:

from scrapy import cmdline

cmdline.execute('scrapy crawl userInfoSpider'.split())

其中“userInfoSpider”為本文2.1.3節(jié)中給出的名字,是該爬蟲的名字。

2)若想在命令行模式下調試運行程序,就不需要文件begin.py,可直接進入命令行模式,運行命令:>scrapy crawl userInfoSpider。

2.2.9? 文件scrapy.cfg

該文件是整個Scrapy項目的配置文件,其內容如下:

[settings]

default = zSinaUser.settings

[deploy]

#url = http://localhost:6800/

project = zSinaUser

該文件聲明了兩件事,一是定義默認設置文件的位置為zSinaUser目錄下的settings.py文件,二是定義項目名稱為zSinaUser。

2.3? 獲取cookie步驟

步驟如下:

1)用谷歌瀏覽器Chrome打開網址https://www.weibo.com/。

2)點擊“立即登錄”,完成手機驗證碼驗證,進入微博平臺里面。

3)按鍵盤功能鍵F12打開開發(fā)者工具(或鼠標右擊網頁空白處,在彈出菜單中點擊條目“檢查”),在Network標簽下選擇Fetch/XHR,在頁面左側的Name框中點擊某一行,再在頁面右側的標簽Headers下的Request Headers下,找到“Cookie: ”后的值,把它復制拷貝到文件settings.py中結構DEFAULT_REQUEST_HEADERS的關鍵詞“cookie”后,如下所示[13]:

DEFAULT_REQUEST_HEADERS = {? ?'Accept-Language': 'en',

'cookie':'SINAGLOBAL=3374182609874.5854. ……Num%22%3A42%2C%22msgbox%22%3A0%7D'}

2.4? 用戶代理

若總是用同一個瀏覽器訪問微博網站,網站就會發(fā)覺是爬蟲在訪問它從而拒絕訪問。為了不讓微博網站發(fā)現是程序在訪問,在下載微博期間可不斷變換瀏覽器名稱,具體做法是每次從瀏覽器名稱列表中隨機挑選出一個瀏覽器名稱來訪問微博網站,這樣瀏覽器名稱在不斷變化,微博網站就會認為是不同的用戶在訪問它,從而不會拒絕訪問。在文件settings.py中的結構DOWNLOADER_MIDDLEWARES中,如下顯示的前一行表示使用我們自己提供的可不斷變換挑選的用戶代理,后一行表示禁用框架Scrapy中原有的用戶代理[14]。

DOWNLOADER_MIDDLEWARES = {? ? ……

'zSinaUser.zmiddlewares.customUserAgent.RandomUserAgent':30,

'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None,? ?}

其中前一行表示啟用目錄zSinaUser下的目錄zmiddlewares下的文件customUserAgent.py中的類class RandomUserAgent來設置本次請求訪問Request所使用的用戶代理的值,具體實現的語句如下:

ua = random.choice(UserAgents)

request.headers.setdefault('User-Agent',ua)

前一句表示從文件resource.py中的列表UserAgents中隨機挑選一個瀏覽器的名稱,后一句表示把挑選出的瀏覽器的名稱設置為當前請求Request的用戶代理[8]。

文件resource.py中用戶代理列表UserAgents的內容是30個不同的瀏覽器的名稱,內容如下所示:

UserAgents = [? ? "Mozilla/5.0 (Linux; U; Android 1.5; en-us; sdk Build/CUPCAKE) AppleWebkit/528.5? (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.

20.1",? ? ……….]

2.5? IP代理

若長時間總是用同一個IP地址訪問微博網站,那微博網站就會發(fā)現是爬蟲在訪問它,從而拒絕訪問。為此我們從快代理公司購買了隧道代理服務功能,可在訪問網站的過程中每隔一定時間變換IP值,比如每隔一分鐘變換一次IP值,而且這些IP值是從上萬個不同的IP值中選出,從而基本上不重復,這就讓微博網站難以發(fā)現是爬蟲程序在下載數據[15]。

為此我們在文件settings.py中的結構DOWNLOADER_MIDDLEWARES中,設置了一項,如下所示:

DOWNLOADER_MIDDLEWARES = {…… 'zSinaUser.middlewares.ProxyDownloaderMiddleware': 100,}

即調用目錄zSinaUser下的文件middlewares.py中的類class ProxyDownloaderMiddleware,設置隧道代理服務器域名、端口號、用戶名、密碼等。

3? 實驗方案

3.1? 實驗過程

本節(jié)說明如何通過Scrapy框架網絡爬蟲批量抓取微博用戶信息。

3.1.1? 輸入

要爬取的微博用戶的ID標識號,集中放在一個文本文件“z0420userid.txt”中,其前5行和最后5行內容如圖2所示,共有7 754行數據,按ID標識號順序從小到大排列。

3.1.2? 輸出

輸出文件“z0421test.txt”前5行和最后5行的截圖如圖3所示,按微博用戶ID標識號升序排列,每行的四個數分別表示該行對應的微博用戶的標識號ID,已發(fā)表的微博數、關注數和粉絲數,要注意的是用戶粉絲數中的值有的單位是“個”,而有的單位是“萬”,還有的單位是“億”。

3.2? 實驗結果分析

3.2.1? 輸入與輸出分析

輸入是7 754行,而輸出是7 639行,輸出比輸入的行數少了115行。這是由于有些微博用戶在輸出前已經被新浪微博網站刪除,從而不存在了;還有些是由于網絡不穩(wěn)定,導致在規(guī)定的時間內沒有下載到相關的數據,從而造成缺失。為此,找出缺失的這115行微博用戶的ID標識號,把它們重新輸入該網絡爬蟲,運行結果得到其中107個微博用戶的標識號ID、微博數、關注數和粉絲數信息,仍未下載到數據的另外8個微博用戶,經人工上網查找,發(fā)現它們已經被新浪微博網站刪除,已不存在了。

3.2.2? 處理時間分析

下載輸入文件“z0420userid.txt”中的七千多名微博用戶的信息耗時6小時22分鐘,這是在Scrapy框架爬蟲的配置文件即本文2.2.7節(jié)文件settings.py中的參數DOWNLOAD_DELAY = 6時得到的結果,該參數用于人為設置接連兩次訪問微博網站的時間間隔。如果該參數值設置為更小的值比如“3”,則會更快地下載完這七千多名微博用戶的信息,但風險是有可能被新浪微博網站識別出是爬蟲在訪問它,從而被拒絕訪問,更嚴重的后果是被封號,那樣得不償失,反倒要花更多的時間、更慢了。所以這個參數的值應該權衡利弊慎重選擇。

4? 結? 論

本文用Python語言設計并實現了一個基于Scrapy框架的網絡爬蟲,能夠根據輸入的用戶標識號ID從新浪微博網站下載到該用戶目前已發(fā)表的微博數、關注數和粉絲數等信息。下載七千多微博用戶信息需要6小時22分鐘,影響下載時長的一個重要參數是接連兩次訪問新浪微博網站的時間間隔,如果該參數值設置太小,微博網站會識別出是爬蟲在訪問它,從而會拒絕訪問,甚至封號,確定該間隔值的最佳值是今后要進一步研究的問題。

參考文獻:

[1] 孫握瑜.基于Python的新浪微博爬蟲程序設計與實現 [J].科技資訊,2022,20(12):34-37.

[2] 史媛.基于Scrapy框架爬取豆瓣圖書的設計與實現 [J].山西電子技術,2022(4):75-77+86.

[3] 王嘉寶,雒偉群.基于Scrapy框架的電影數據爬取和可視化分析 [J].西藏科技,2022(2):64-68.

[4] 邢婭凱.基于Scrapy框架爬蟲和數據挖掘的當當網頁信息分析 [D].長沙:湘潭大學,2020.

[5] 孫瑜.基于Scrapy框架的網絡爬蟲系統(tǒng)的設計與實現 [D].北京:北京交通大學,2019.

[6] 何波.基于Python的新浪微博中爬蟲程序維護方法 [J].軟件,2022,43(2):52-54.

[7] 汪兵.基于Scrapy框架的分布式爬蟲系統(tǒng)設計與實現 [D].合肥:合肥工業(yè)大學,2019.

[8] 魏海昱,林偉鴻,賀超波.基于Scrapy的食品安全輿情數據爬取與分析 [J].現代計算機,2022,28(14):49-54+95.

[9] 樊宇豪.基于Scrapy的分布式網絡爬蟲系統(tǒng)設計與實現 [D].成都:電子科技大學,2018.

[10] 楊君.基于Scrapy技術的數據采集系統(tǒng)的設計與實現 [D].南京:南京郵電大學,2018.

[11] 董少林,李鐘慎.采用Scrapy分布式爬蟲技術的微博熱點輿情信息獲取與分析 [J].電腦與信息技術,2020,28(5):23-26.

[12] 謝鋼.基于Scrapy的信息采集與分析 [J].現代信息科技,2020,4(14):96-98.

[13] 周毅,李威,何金,等.基于Scrapy框架的分布式網絡爬蟲系統(tǒng)設計與實現 [J].現代信息科技,2021,5(19):43-46.

[14] 鄒維,李廷元.基于Scrapy爬蟲框架的領域網站文件爬取 [J].現代信息科技,2020,4(21):6-9.

[15] 閻澤群.基于網絡爬蟲技術的大數據采集系統(tǒng)設計 [J].現代信息科技,2021,5(12):83-86.

作者簡介:朱燁行(1969—),男,漢族,陜西渭南人,副教授,博士,研究方向:數據挖掘;通訊作者:趙寶瑩(1985—),女,漢族,河南洛陽人,講師,碩士,研究方向:教育技術;張明杰(1977—),男,漢族,陜西銅川人,副教授,博士,研究方向:互聯網輿情分析;魏笑笑(1979—),女,漢族,湖南益陽人,副教授,碩士,研究方向:信息資源管理;衛(wèi)昆(1976—),男,漢族,江蘇昆山人,講師,博士,研究方向:數據挖掘。

收稿日期:2023-04-19

基金項目:陜西省社會科學基金項目(2020R048);陜西省科技計劃項目(2021GY-180);陜西省科技廳項目(2021JM-467);陜西省教育廳科研計劃項目(20JZ086)

猜你喜歡
網絡爬蟲微博
何以解憂?基于社交媒體大數據的睡眠健康公眾敘事研究
煉鐵廠鐵量網頁數據獲取系統(tǒng)的設計與實現
“985工程”高校圖書館閱讀推廣的調查與分析
事實與流言的博弈
關于高中語文教學中微博的有效運用思考
基于社會網絡分析的權威網頁挖掘研究
主題搜索引擎中網絡爬蟲的實現研究
淺析如何應對網絡爬蟲流量
網絡爬蟲針對“反爬”網站的爬取策略研究
神回復