Pyhton爬蟲之requests與BeautifulSoup

requests與BeautifulSoup基礎(chǔ)入門

1. 前言

最近在學(xué)習(xí)python爬蟲,以前實(shí)現(xiàn)python爬蟲,主要是使用較為底層的urllib和urllib2來(lái)實(shí)現(xiàn)的瓷患,這種方法最原始,編碼起來(lái)也比較困難。而采用requests + BeautifulSoup的實(shí)現(xiàn)方案疤孕,可以簡(jiǎn)化代碼的書寫。如果有不好和錯(cuò)誤的地方希望大佬指出央拖。

2. 介紹

  1. 在使用這兩個(gè)模塊之前胰柑,需要對(duì)這兩個(gè)模塊做一些介紹:requests是基于urllib,采用 Apache2 Licensed 開(kāi)源協(xié)議的 HTTP 庫(kù)爬泥,比 urllib 更加方便柬讨。BeautifulSoup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù),實(shí)際上袍啡,它將html中的tag作為樹(shù)節(jié)點(diǎn)進(jìn)行解析踩官。
  2. requests官方文檔:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
  3. BeautifulSoup官方文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

3. 實(shí)現(xiàn)代碼

首先是引入這2個(gè)庫(kù),這里我使用的是PyCharm編輯器境输,通過(guò)Settings→Project: WorkSpace→Project Interpreter尋找bs4和requests庫(kù)蔗牡。pip方法引入第三方庫(kù)請(qǐng)自行百度颖系。


bs4庫(kù)
requests庫(kù)

先從最簡(jiǎn)單的開(kāi)始,點(diǎn)進(jìn)糗事百科首頁(yè)

import requests # 導(dǎo)入requests模塊
res = requests.get("http://www.qiushibaike.com") # 獲取糗事百科首頁(yè)
print (res.text) # print(res)打印的是響應(yīng)碼辩越,print(res.text)打印的是首頁(yè)的源代碼

得到頁(yè)面源碼嘁扼,如果發(fā)現(xiàn)頁(yè)面文字是亂碼,則是編碼的原因黔攒,輸出頁(yè)面的編碼

print (res.encoding)
編碼

如果不是UTF-8趁啸,可以設(shè)置為UTF-8

res.encoding = "utf-8"

點(diǎn)進(jìn)一篇文章,按F12進(jìn)入開(kāi)發(fā)者工具督惰,按住ctrl+shift+c或者是點(diǎn)擊左上角的剪頭選中頁(yè)面中的文章

選擇元素

發(fā)現(xiàn)其class是content

content
# 獲取文章內(nèi)容
import requests
from bs4 import BeautifulSoup
res = requests.get("https://www.qiushibaike.com/article/119567920")
soup = BeautifulSoup(res.text, "html.parser") # 把我們需要的內(nèi)容放到BeautifulSoup中不傅,html.parser是一個(gè)解析器
div = soup.find_all(class_="content")[0] # 找尋class為content的內(nèi)容
print(div.text.strip()) # 輸出文章內(nèi)容
內(nèi)容

如果要獲取首頁(yè)一頁(yè)的文章內(nèi)容,則通過(guò)開(kāi)發(fā)者工具查看首頁(yè)赏胚,發(fā)現(xiàn)每個(gè)文章的頁(yè)面class為article block untagged mb15 typs_xxxx

article block untagged mb15 typs_xxxx

用re來(lái)匹配各種文章的class访娶。
Python3正則表達(dá)式:http://www.runoob.com/python3/python3-reg-expressions.html

# 獲取所有文章的內(nèi)容
import requests
from bs4 import BeautifulSoup
import re

res = requests.get("http://www.qiushibaike.com")
soup = BeautifulSoup(res.text, "html.parser")
divs = soup.find_all(class_=re.compile(r'article block untagged mb15 typs_(\w*)')) # 所有文章是一個(gè)數(shù)組
for div in divs: # 循環(huán)取出
    joke = div.span.get_text()
    print(joke.strip())
    print("------")

輸出內(nèi)容后發(fā)現(xiàn)有些內(nèi)容讀起來(lái)很奇怪,看頁(yè)面發(fā)現(xiàn)有些是有圖片的觉阅,圖片的網(wǎng)頁(yè)標(biāo)簽(HTML tag)是img崖疤。

picture

所以我們要把有圖片的文章過(guò)濾掉,發(fā)現(xiàn)有圖片文章有個(gè)class為thumb典勇,則我們把有圖片的過(guò)濾掉

thumb
# 獲取一頁(yè)沒(méi)有圖片的文章
import requests
from bs4 import BeautifulSoup
import re

res = requests.get("http://www.qiushibaike.com")
soup = BeautifulSoup(res.text, "html.parser")
divs = soup.find_all(class_=re.compile(r'article block untagged mb15 typs_(\w*)')) # 匹配class
for div in divs:
    if div.find_all(class_="thumb"): # 如果有圖片則過(guò)濾
      continue
    joke = div.span.get_text()
    print(joke.strip())
    print("------")

但是糗事百科有很多頁(yè)劫哼,點(diǎn)擊第二頁(yè)發(fā)現(xiàn)網(wǎng)址為:https://www.qiushibaike.com/8hr/page/2/ ,點(diǎn)擊第三頁(yè)發(fā)現(xiàn)網(wǎng)址為:https://www.qiushibaike.com/8hr/page/3 痴柔,所以我們只需要將網(wǎng)址最后的數(shù)字變動(dòng)即可得到其他頁(yè)面

# 獲取前幾頁(yè)的文章
import requests
from bs4 import BeautifulSoup
import re

base_url = "https://www.qiushibaike.com/8hr/page/"
for num in range(1, 3): # 設(shè)置循環(huán)沦偎,讓num分別等于1-3,獲取前3頁(yè)內(nèi)容
    print('第{}頁(yè):'.format(num))
    res = requests.get(base_url + str(num))  # 這里對(duì)網(wǎng)址后面加上數(shù)字
    soup = BeautifulSoup(res.text, "html.parser")
    divs = soup.find_all(class_=re.compile(r'article block untagged mb15 typs_(\w*)'))
    for div in divs:
        if div.find_all(class_="thumb"):
            continue
        joke = div.span.get_text()
        print(joke.strip())
        print("------")
    print("\n\n\n\n\n\n\n")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咳蔚,一起剝皮案震驚了整個(gè)濱河市豪嚎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谈火,老刑警劉巖侈询,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異糯耍,居然都是意外死亡扔字,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門温技,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)革为,“玉大人,你說(shuō)我怎么就攤上這事舵鳞≌痖荩” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)抛虏。 經(jīng)常有香客問(wèn)我博其,道長(zhǎng),這世上最難降的妖魔是什么迂猴? 我笑而不...
    開(kāi)封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任慕淡,我火速辦了婚禮,結(jié)果婚禮上沸毁,老公的妹妹穿的比我還像新娘峰髓。我一直安慰自己,他們只是感情好以清,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布儿普。 她就那樣靜靜地躺著崎逃,像睡著了一般掷倔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上个绍,一...
    開(kāi)封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天勒葱,我揣著相機(jī)與錄音,去河邊找鬼巴柿。 笑死凛虽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的广恢。 我是一名探鬼主播凯旋,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钉迷!你這毒婦竟也來(lái)了至非?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤糠聪,失蹤者是張志新(化名)和其女友劉穎荒椭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體舰蟆,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趣惠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了身害。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片味悄。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖塌鸯,靈堂內(nèi)的尸體忽然破棺而出侍瑟,到底是詐尸還是另有隱情,我是刑警寧澤界赔,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布丢习,位于F島的核電站牵触,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏咐低。R本人自食惡果不足惜揽思,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望见擦。 院中可真熱鬧钉汗,春花似錦、人聲如沸鲤屡。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酒来。三九已至卢未,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間堰汉,已是汗流浹背辽社。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翘鸭,地道東北人滴铅。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像就乓,于是被迫代替她去往敵國(guó)和親汉匙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • 聲明:本文講解的實(shí)戰(zhàn)內(nèi)容生蚁,均僅用于學(xué)習(xí)交流噩翠,請(qǐng)勿用于任何商業(yè)用途! 一守伸、前言 強(qiáng)烈建議:請(qǐng)?jiān)陔娔X的陪同下绎秒,閱讀本文...
    Bruce_Szh閱讀 12,725評(píng)論 6 28
  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富,涉及面非常廣尼摹。awesome-p...
    若與閱讀 18,662評(píng)論 4 418
  • Python爬蟲入門(urllib+Beautifulsoup) 本文包括:1见芹、爬蟲簡(jiǎn)單介紹2、爬蟲架構(gòu)三大模塊3...
    廖少少閱讀 9,845評(píng)論 0 6
  • 環(huán)境管理管理Python版本和環(huán)境的工具蠢涝。p–非常簡(jiǎn)單的交互式python版本管理工具玄呛。pyenv–簡(jiǎn)單的Pyth...
    MrHamster閱讀 3,797評(píng)論 1 61
  • 勞資虛了,怎么辦和二,不知道怎么辦徘铝,勞資還要當(dāng)你的小仙女呢,...怎么辦,好想頹廢惕它,廢怕午,廢,淹魄,怎么辦郁惜,誰(shuí)給我個(gè)信仰。
    這里Cc閱讀 91評(píng)論 0 0