python爬蟲入門-簡(jiǎn)書七日熱門文章數(shù)據(jù)

前言

以我的理解,寫一個(gè)爬蟲分為以下幾個(gè)步驟

  1. 分析目標(biāo)網(wǎng)站
  2. 訪問單個(gè)網(wǎng)頁(yè)地址谊迄,獲取網(wǎng)頁(yè)源代碼
  3. 提取數(shù)據(jù)
  4. 保存數(shù)據(jù)
  5. 抓取剩余網(wǎng)頁(yè)
    以下開始正題

1. 分析目標(biāo)網(wǎng)站

  1. 目標(biāo)網(wǎng)站為簡(jiǎn)書七日熱門文章 http://www.reibang.com/trending/weekly 拇派。 提取數(shù)據(jù)為用戶分衫,標(biāo)題爷辱,閱讀量证芭,評(píng)論量晕翠,獲贊量喷舀,打賞數(shù)
    提取目標(biāo)
  2. 用chrome tools 查看這個(gè)網(wǎng)頁(yè),是用ajax加載的崖面,分析規(guī)律元咙,發(fā)現(xiàn)url為 http://www.reibang.com/trending/weekly?page=1 , page=1 至 page=5.
    url規(guī)律

2. 訪問單個(gè)網(wǎng)頁(yè)地址巫员,獲取網(wǎng)頁(yè)源代碼

  1. 設(shè)置url
url = 'http://www.reibang.com/trending/weekly?page=1'
  1. 設(shè)置頭部信息(用來(lái)偽裝請(qǐng)求庶香,本案例中可省略)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}
request = urllib2.Request(url=url, headers=headers)
  1. 發(fā)送請(qǐng)求和接收響應(yīng)
html = urllib2.urlopen(request)

3. 從源代碼中提取數(shù)據(jù)

# 先用BeautifulSoup轉(zhuǎn)換一下,以便之后解析
bsObj = BeautifulSoup(html.read(), 'lxml')
  1. 抓出每篇文章的源代碼简识,并提取目標(biāo)數(shù)據(jù)(寫的很差勁赶掖,just work)


    文章源碼
items = bsObj.findAll("div", {"class": "content"})
    for item in items:
        author = item.find("a", {"class": "blue-link"}).get_text()
        title = item.find("a", {"class": "title"}).get_text()
        other = item.find("div", {"class": "meta"}).get_text()
        pattern = re.compile('(\d+)')
        content = re.findall(pattern, other)
        view = content[0]
        comment = content[1]
        like = content[2]
        money = content[3] if (len(content) == 4) else 0 # 非常不嚴(yán)謹(jǐn),暫時(shí)這么做

4. 保存數(shù)據(jù)

with open('articlesOfSevenDays.csv', 'a') as resultFile:
    wr = csv.writer(resultFile, dialect= 'excel')
    wr.writerow([author,title,view,comment,like,money])

因?yàn)橛龅骄幋a問題七扰,所以添加以下代碼

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

5. 抓取剩余網(wǎng)頁(yè)

for i in range(1,6):
    print "開始抓取第{}頁(yè)...".format(i)
    url = 'http://www.reibang.com/trending/weekly?page={}'. format(i)
    # 重復(fù)之前提取數(shù)據(jù)和保存數(shù)據(jù)的代碼

完整的代碼

#!/usr/bin/env python
# coding=utf-8
from urllib.request import Request,urlopen
from bs4 import BeautifulSoup
from urllib.error import HTTPError
import re
import csv
import os


def getHTML(i):
    url = 'http://www.reibang.com/trending/weekly?page={}'.format(i)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}
    try:
        request = Request(url=url, headers=headers)
        html = urlopen(request)
        bsObj = BeautifulSoup(html.read(), 'lxml')
        items = bsObj.findAll("div", {"class": "content"})
    except HTTPError as e:
        print(e)
        exit()
    return items

def getArticleInfo(items):
    articleInfo= []
    for item in items:
        author = item.find("a", {"class": "blue-link"}).get_text()
        title = item.find("a", {"class": "title"}).get_text()
        other = item.find("div", {"class": "meta"}).get_text()
        pattern = re.compile('(\d+)')
        content = re.findall(pattern, other)
        view = content[0]
        comment = content[1]
        like = content[2]
        money = content[3] if (len(content) == 4) else 0  # 不太嚴(yán)謹(jǐn)
        articleInfo.append([author, title, view, comment, like, money])
    return articleInfo

dir = "../jianshu/"
if not os.path.exists(dir):
    os.makedirs(dir)
csvFile = open("../jianshu/jianshuSevenDaysArticles.csv","wt",encoding='utf-8')
writer = csv.writer(csvFile)
writer.writerow(("author", "title", "view", "comment", "like", "money"))
try:
    for i in range(1, 6):
        items = getHTML(i)
        articleInfo = getArticleInfo(items)
        for item in articleInfo:
                writer.writerow(item)

finally:
    csvFile.close()

抓取結(jié)果


image.png

總結(jié)

  1. 頁(yè)面解析水平不好奢赂,接下來(lái)要學(xué)習(xí):正則表達(dá)式,beautifulSoup颈走,lxml
  2. 遇到的編碼問題待學(xué)習(xí)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膳灶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌轧钓,老刑警劉巖序厉,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異毕箍,居然都是意外死亡弛房,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門而柑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)文捶,“玉大人,你說我怎么就攤上這事媒咳〈馀牛” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵伟葫,是天一觀的道長(zhǎng)恨搓。 經(jīng)常有香客問我,道長(zhǎng)筏养,這世上最難降的妖魔是什么斧抱? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮渐溶,結(jié)果婚禮上辉浦,老公的妹妹穿的比我還像新娘。我一直安慰自己茎辐,他們只是感情好宪郊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拖陆,像睡著了一般弛槐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上依啰,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天乎串,我揣著相機(jī)與錄音,去河邊找鬼速警。 笑死叹誉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闷旧。 我是一名探鬼主播长豁,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼忙灼!你這毒婦竟也來(lái)了匠襟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宅此,沒想到半個(gè)月后机错,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爬范,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡父腕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了青瀑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片璧亮。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖斥难,靈堂內(nèi)的尸體忽然破棺而出枝嘶,到底是詐尸還是另有隱情,我是刑警寧澤哑诊,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布群扶,位于F島的核電站,受9級(jí)特大地震影響镀裤,放射性物質(zhì)發(fā)生泄漏竞阐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一暑劝、第九天 我趴在偏房一處隱蔽的房頂上張望骆莹。 院中可真熱鬧,春花似錦担猛、人聲如沸幕垦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)先改。三九已至,卻和暖如春蒸走,著一層夾襖步出監(jiān)牢的瞬間仇奶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工载碌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猜嘱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓嫁艇,卻偏偏與公主長(zhǎng)得像朗伶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子步咪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容