早上起來閑來無事做,莫名其妙的就彈出了糗事百科的段子,轉念一想既然你送上門來,那我就寫個爬蟲到你網站上爬一爬吧,一來當做練練手,二來也算找點樂子。
其實這兩天也正在接觸數據庫的內容,可以將爬取下來的數據保存在數據庫中,以待以后的利用。好了,廢話不多說了,先來看看程序爬取的數據結果
值得一提的是,我在程序中想一下子爬取糗事百科 30 頁的內容,但是出現了連接錯誤,當我把頁數降到 20 頁的時候,程序就可以正常的跑起來了,不知道是什么原因,渴望知道的大神可以告訴我一聲,感激不盡。
程序非常簡單,直接上源代碼咯
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# coding=utf8 import re import requests from lxml import etree from multiprocessing.dummy import Pool as ThreadPool import sys reload (sys) sys.setdefaultencoding( 'utf-8' ) def getnewpage(url, total): nowpage = int (re.search( '(\d+)' , url, re.S).group( 1 )) urls = [] for i in range (nowpage, total + 1 ): link = re.sub( '(\d+)' , '%s' % i, url, re.S) urls.append(link) return urls def spider(url): html = requests.get(url) selector = etree.HTML(html.text) author = selector.xpath( '//*[@id="content-left"]/div/div[1]/a[2]/@title' ) content = selector.xpath( '//*[@id="content-left"]/div/div[2]/text()' ) vote = selector.xpath( '//*[@id="content-left"]/div/div[3]/span/i/text()' ) length = len (author) for i in range ( 0 , length): f.writelines( '作者 : ' + author[i] + '\n' ) f.writelines( '內容 :' + str (content[i]).replace( '\n' ,' ') + ' \n') f.writelines( '支持 : ' + vote[i] + '\n\n' ) if __name__ = = '__main__' : f = open ( 'info.txt' , 'a' ) url = 'http://www.qiushibaike.com/text/page/1/' urls = getnewpage(url, 20 ) pool = ThreadPool( 4 ) pool. map (spider,urls) f.close() |
如果其中有不懂得部分,可以依次參考我的前三篇文章。