編程相關(guān) | Python簡單網(wǎng)頁爬蟲

1 環(huán)境

Windows7 x64

Python 3.7

2 流程

i) 導(dǎo)入庫

ii)爬取網(wǎng)頁源代碼信息;

iii)爬取特定格式信息并保存為txt文檔丢习;

iv)爬取過程及代碼的一些限定條件金矛。

3 代碼

3.1 配置相關(guān)庫(requests和BS4)

輸入


import requests

from bs4 import BeautifulSoup

輸出

導(dǎo)入爬蟲相關(guān)庫

3.2 爬取網(wǎng)頁源代碼

輸入


def download_page(url): # 用于下載頁面

   headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"}

   r = requests.get(url, headers=headers)

   return r.text

輸出

初始化必要參數(shù),完成基礎(chǔ)設(shè)置

備注:

聲明函數(shù)(def)那一行的上方必須有兩行的空行(PEP8:python編碼規(guī)范)

3.3 爬取特定信息并保存

輸入


def get_content(html, page):

   output = """第{}頁 作者:{} 性別:{} 年齡:{} 點(diǎn)贊:{} 評(píng)論:{}\n{}\n------------\n"""

   soup = BeautifulSoup(html, 'html.parser')

   con = soup.find(id='content-left')

   con_list = con.find_all('div', class_="article")

   for i in con_list:

       author = i.find('h2').string  # 獲取作者名字

       content = i.find('div', class_='content').find('span').get_text()  # 獲取內(nèi)容

       stats = i.find('div', class_='stats')

       vote = stats.find('span', class_='stats-vote').find('i', class_='number').string # 獲取點(diǎn)贊數(shù)

       comment = stats.find('span', class_='stats-comments').find('i', class_='number').string # 獲取評(píng)論數(shù)

       author_info = i.find('div', class_='articleGender')  # 獲取作者 年齡抒和,性別

       if author_info is not None:  # 非匿名用戶

           class_list = author_info['class']

           if "womenIcon" in class_list:

               gender = '女'

           elif "manIcon" in class_list:

               gender = '男'

           else:

               gender = ''

           age = author_info.string   # 獲取年齡

       else:  # 匿名用戶

           gender = ''

           age = ''

?

       save_txt(output.format(page, author, gender, age, vote, comment, content))

輸出

從網(wǎng)頁源代碼中爬确治:頁碼、作者信息(姓名梢褐、性別旺遮、年齡)赵讯、點(diǎn)贊數(shù)、評(píng)論數(shù)耿眉、文本內(nèi)容

輸入


def save_txt(*args):

   for i in args:

       with open('qiushibaike.txt', 'a', encoding='utf-8') as file:

           file.write(i)

輸出

將爬取信息保存為txt文檔

3.4 限定條件

輸入


def main():

   for i in range(1, 11):

       url = 'https://qiushibaike.com/text/page/{}'.format(i)

       html = download_page(url)

       get_content(html, i)

輸出

限定爬取頁碼:1-10(含10)頁

輸入

if __name__ == '__main__':

   main()

輸出

當(dāng).py文件被直接運(yùn)行時(shí)瘦癌,代碼塊被運(yùn)行;否則(當(dāng).py文件以模塊形式被導(dǎo)入時(shí))跷敬,代碼塊不運(yùn)行

4 全文

代碼全文如下:

# -*- coding: utf-8 -*-

###############################################################################
# Crawler
# Author: Lenox
# Data:2019.03.22
# License: BSD 3.0
###############################################################################

# 配置相關(guān)庫
import requests
from bs4 import BeautifulSoup


# 抓取網(wǎng)頁信息讯私,返回格式為*.text的文本
def download_page(url): # 用于下載頁面
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"}
    r = requests.get(url, headers=headers)
    return r.text


# 爬取特定網(wǎng)頁、頁碼下的特定格式信息
def get_content(html, page):
    output = """第{}頁 作者:{} 性別:{} 年齡:{} 點(diǎn)贊:{} 評(píng)論:{}\n{}\n------------\n"""
    soup = BeautifulSoup(html, 'html.parser')
    con = soup.find(id='content-left')
    con_list = con.find_all('div', class_="article")
    for i in con_list:
        author = i.find('h2').string  # 獲取作者名字
        content = i.find('div', class_='content').find('span').get_text()  # 獲取內(nèi)容
        stats = i.find('div', class_='stats')
        vote = stats.find('span', class_='stats-vote').find('i', class_='number').string # 獲取點(diǎn)贊數(shù)
        comment = stats.find('span', class_='stats-comments').find('i', class_='number').string # 獲取評(píng)論數(shù)
        author_info = i.find('div', class_='articleGender')  # 獲取作者 年齡西傀,性別
        if author_info is not None:  # 非匿名用戶
            class_list = author_info['class']
            if "womenIcon" in class_list:
                gender = '女'
            elif "manIcon" in class_list:
                gender = '男'
            else:
                gender = ''
            age = author_info.string   # 獲取年齡
        else:  # 匿名用戶
            gender = ''
            age = ''

        save_txt(output.format(page, author, gender, age, vote, comment, content))


# 將爬取內(nèi)容保存為txt文檔
def save_txt(*args):
    for i in args:
        with open('qiushibaike.txt', 'a', encoding='utf-8') as file:
            file.write(i)


# 限定爬取1-10(含10)頁的內(nèi)容斤寇。我們也可以用 Beautiful Soup找到頁面底部有多少頁。
def main():
    for i in range(1, 11):
        url = 'https://qiushibaike.com/text/page/{}'.format(i)
        html = download_page(url)
        get_content(html, i)


# 當(dāng).py文件被直接運(yùn)行時(shí)拥褂,代碼塊被運(yùn)行娘锁;否則(當(dāng).py文件以模塊形式被導(dǎo)入時(shí)),代碼塊不運(yùn)行
if __name__ == '__main__':
    main()

?

5 參考

[1]Python 爬蟲入門(一)——爬取糗百

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饺鹃,一起剝皮案震驚了整個(gè)濱河市莫秆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悔详,老刑警劉巖镊屎,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異茄螃,居然都是意外死亡缝驳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門归苍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來用狱,“玉大人,你說我怎么就攤上這事拼弃∠囊粒” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵吻氧,是天一觀的道長溺忧。 經(jīng)常有香客問我,道長医男,這世上最難降的妖魔是什么砸狞? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任捻勉,我火速辦了婚禮镀梭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踱启。我一直安慰自己报账,他們只是感情好研底,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著透罢,像睡著了一般榜晦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上羽圃,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天乾胶,我揣著相機(jī)與錄音,去河邊找鬼朽寞。 笑死识窿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脑融。 我是一名探鬼主播喻频,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼肘迎!你這毒婦竟也來了甥温?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤妓布,失蹤者是張志新(化名)和其女友劉穎姻蚓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匣沼,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡史简,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肛著。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圆兵。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枢贿,靈堂內(nèi)的尸體忽然破棺而出殉农,到底是詐尸還是另有隱情,我是刑警寧澤局荚,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布超凳,位于F島的核電站,受9級(jí)特大地震影響耀态,放射性物質(zhì)發(fā)生泄漏轮傍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一首装、第九天 我趴在偏房一處隱蔽的房頂上張望创夜。 院中可真熱鬧,春花似錦仙逻、人聲如沸驰吓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檬贰。三九已至姑廉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翁涤,已是汗流浹背桥言。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葵礼,地道東北人限书。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像章咧,于是被迫代替她去往敵國和親倦西。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361