Python使用Scrapy爬蟲框架爬取天涯社群小說“大宗師”全文
大宗師是著名網路小說作家蛇從革的系列作品“宜昌鬼事”之一,在天涯論壇具有超級高的訪問量。這個長篇小說於2015年3月17日開篇,並於2016年12月29日大結局,期間每天有7萬多讀者閱讀。如果在天涯社群直接閱讀的話,會被很多讀者留言干擾,如圖
於是,我寫了下面的程式碼,從天涯社群該小說的第一篇開始依次爬取每一頁,提取作者“蛇從革”發過的文字並儲存成為記事本文件。當然,程式碼還可以再優化一下,例如有時候作者就發了一句話“今天沒有了”,按說這樣的話可以過濾掉,大家可以自行修改。
在執行程式碼之前,首先要正確安裝Python的爬蟲框架scrapy,這個擴充套件庫在Python 2.7.x中表現一直不錯,現在也支援Python 3.5.x以及更新版本,可以使用pip直接進行安裝,但是scrapy依賴的某些擴充套件庫對高版本Python支援並不是很好,在使用pip安裝scrapy的過程中如果某個依賴的擴充套件庫安裝失敗,可以到網上下載相應的whl檔案進行安裝,重複上面的過程,知道出現“Successfully installed...”這樣的提示。
接下來就是建立爬蟲專案了,進入命令提示符(cmd)環境,切換至Python安裝目錄的scripts目錄,執行命令scrapy startproject xiaoshuo建立爬蟲專案xiaoshuo,進入該目錄,然後編寫Python程式檔案\spiders\spiderYichangGuishi.py(內容就是下面的程式碼),然後在命令提示符環境中執行命令scrapy crawl spiderYichangGuishi,稍等大概3分鐘左右即可爬取小說全文並生成記事本文件。
當然,在編寫爬蟲程式碼之前,需要對目標網站進行分析一下,開啟要小說首頁,右鍵,單擊“檢視原始碼”,然後分析網頁結構,如圖,紅色標記處是比較重點的地方。
\spiders\spiderYichangGuishi.py程式碼如下:
import scrapy
class MySpider(scrapy.spiders.Spider):
#爬蟲的名字,每個爬蟲必須有不同的名字
name = 'spiderYichangGuishi'
#要爬取的小說首頁,第一篇
start_urls = ['http://bbs.tianya.cn/post-16-1126849-1.shtml']
#對每個要爬取的頁面,會自動呼叫下面這個方法
def parse(self, response):
#用來存放當前頁中的小說正文
content = []
for i in response.xpath('//div'):
#作者蛇從革的天涯賬號
if i.xpath('@_hostid').extract()==['13357319']:
for j in i.xpath('div//div'):
#提取文字
c = j.xpath('text()').extract()
#過濾干擾符號
g = lambda x:x.strip('\n\r\u3000').replace('<br>', '\n').replace('|', '')
c = '\n'.join(map(g, c)).strip()
content.append(c)
with open('result.txt', 'a+', encoding='utf8') as fp:
fp.writelines(content)
#獲取下一頁網址並繼續爬取
url = response.url
d = url[url.rindex('-')+1:url.rindex('.')]
next_url = 'http://bbs.tianya.cn/post-16-1126849-{0}.shtml'.format(int(d)+1)
try:
yield scrapy.Request(url=next_url, callback=self.parse)
except:
pass
爬取到的小說大概就是下面的樣子了
更多Python技術文章請關注微信公眾號“Python小屋”閱讀。