Python爬蟲簡單實現(xiàn)

所需要使用模塊

requests官網(wǎng)API:https://requests.readthedocs.io/zh_CN/latest/
bs4API:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

簡單的例子

# 倒入模塊
import requests
from bs4 import BeautifulSoup
import json
import time


# 簡單爬蟲
class Reptile:

    # url
    url = "https://docs.python.org/zh-cn/3.9/library/csv.html"
    # header
    headers = {
        # 請求代理谜叹,模擬瀏覽器請求
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"
    }

    # 獲取網(wǎng)頁內(nèi)容
    def get_url_data(self, file_name):
        # 發(fā)起請求
        r = requests.get(self.url, headers=self.headers)
        # 制定網(wǎng)頁文本格式
        b = BeautifulSoup(r.text, "html.parser")
        # 獲取指定標(biāo)簽竭宰、class的內(nèi)容
        mooc_classes = b.find_all("a", "reference")
        class_list = []

        # 格式化課程信息
        for i in range(len(mooc_classes)):
            title = mooc_classes[i].text.strip()
            class_list.append("鏈接名稱: {} \n".format(title))

        # 將課程信息寫入文本文件中
        with open(file_name, "a+") as f:
            for text in class_list:
                f.write(text)

    # 抓取圖片
    def get_images(self):
        try:
            # 開始抓取時間
            print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
            # 抓取站酷圖片URL螟凭,循環(huán)抓取100次惕耕,每次抓取20
            url = "https://www.zcool.com.cn/discover.json"
            i = 1
            n = 1
            while i < 100:
                params = {
                    'cate': 33,
                    'subCate': 0,
                    'hasVideo': 0,
                    'city': 0,
                    'college': 0,
                    'recommendLevel': 2,
                    'sort': i,
                    'sa': '1616382241000,p_12879945',
                    'pageNo': 1,
                    'gogoupApiFlag': True,
                    'isFetchGogoUp': False,
                    'limit': 20
                }
                i = i + 1
                # 發(fā)起請求
                r = requests.get(url, headers=self.headers, params=params)
                # JSON解碼
                data = json.loads(r.text)
                for item in data["data"]["data"]:
                    if item["object"]["cover"] != "":
                        print(item["object"]["cover"], item["object"]["title"], n)
                        n = n + 1
                        res = requests.get(item["object"]["cover"], headers=self.headers)
                        title = item["object"]["title"].replace("/", "_")
                        with open("./images/%s.jpg" % title, 'wb') as f:
                            f.write(res.content)
            # 結(jié)束抓取時間
            print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        except Exception as e:
            print("抓取失敗劫拗。继效。早像。桨踪。")
            print(e.args)
            print(str(e))
            print(repr(e))
        else:
            print("完成")


反爬蟲

1、請求頭識別
這是一種最基本的反爬蟲方式掀亩,網(wǎng)站運(yùn)營者通過驗證爬蟲的請求頭的 User-agent,accep-enconding 等信息來驗證請求的發(fā)出宿主是不是真實的用戶常用瀏覽器或者一些特定的請求頭信息舔哪。
2、動態(tài)加載
通過 Ajax槽棍,或 者javascript 來動態(tài)獲取和加載數(shù)據(jù)捉蚤,加大爬蟲直接獲取數(shù)據(jù)的難度。
3炼七、驗證碼
這個相信大多數(shù)讀者非常熟悉了吧缆巧,當(dāng)我們輸錯多次密碼的時候,很多平臺都會彈出各種二維碼讓我們識別豌拙,或者搶火車票的時候陕悬,會出現(xiàn)各種復(fù)雜的驗證碼,驗證碼是反爬蟲措施中按傅,運(yùn)用最廣捉超,同時也是最有效直接的方式來阻止爬蟲的措施之一。
4唯绍、限制IP
在識別到某些異常的訪問的時候拼岳,網(wǎng)站運(yùn)營者會設(shè)置一個黑名單,把一些判定為爬蟲的IP進(jìn)行限制或者封殺况芒。
5惜纸、賬號限制
有些網(wǎng)站,沒有游客模式绝骚,只有通過注冊后才可以登錄看到內(nèi)容堪簿,這個就是典型的使用賬號限制網(wǎng)站,一般可以用在網(wǎng)站用戶量不多皮壁,數(shù)據(jù)安全要求嚴(yán)格的網(wǎng)站中。

反反爬蟲

1哪审、更改 UserAgent
我們可以在請求頭中替換我們的請求媒介蛾魄,讓網(wǎng)站誤認(rèn)為是我們是通過移動端的訪問,運(yùn)行下面的代碼后湿滓,當(dāng)我們打開 hupu.html,我們會發(fā)現(xiàn)返回的是移動端的虎撲的頁面而不是網(wǎng)頁端的滴须。
2、減少爬取頻率叽奥,設(shè)置間隔時間
比如扔水,我們可以設(shè)置一個隨機(jī)的間隔時間,來模擬用戶的行為朝氓,減少訪問的次數(shù)和頻率魔市。
我們可以在我們爬蟲的程序中主届,加入如下的代碼,讓爬蟲休息3秒左右待德,再進(jìn)行爬取君丁,可以有效地避開網(wǎng)站的對爬蟲的檢測和識別。
3将宪、運(yùn)用代理機(jī)制
代理就是通過訪問第三方的機(jī)器绘闷,然后通過第三方機(jī)器的 IP 進(jìn)行訪問,來隱藏自己的真實IP地址较坛。
4印蔗、變換IP進(jìn)行爬取
可以通過動態(tài)的 IP 撥號服務(wù)器來變換 IP,也可以通過 Tor 代理服務(wù)器來變換 IP丑勤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末华嘹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子确封,更是在濱河造成了極大的恐慌除呵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爪喘,死亡現(xiàn)場離奇詭異颜曾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)秉剑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門泛豪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侦鹏,你說我怎么就攤上這事诡曙。” “怎么了略水?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵价卤,是天一觀的道長。 經(jīng)常有香客問我渊涝,道長慎璧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任跨释,我火速辦了婚禮胸私,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳖谈。我一直安慰自己岁疼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布缆娃。 她就那樣靜靜地躺著捷绒,像睡著了一般瑰排。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疙驾,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天凶伙,我揣著相機(jī)與錄音,去河邊找鬼它碎。 笑死函荣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扳肛。 我是一名探鬼主播傻挂,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挖息!你這毒婦竟也來了金拒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤套腹,失蹤者是張志新(化名)和其女友劉穎绪抛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體电禀,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡幢码,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了尖飞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片症副。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖政基,靈堂內(nèi)的尸體忽然破棺而出贞铣,到底是詐尸還是另有隱情,我是刑警寧澤沮明,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布辕坝,位于F島的核電站,受9級特大地震影響荐健,放射性物質(zhì)發(fā)生泄漏酱畅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一摧扇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挚歧,春花似錦扛稽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽用含。三九已至,卻和暖如春帮匾,著一層夾襖步出監(jiān)牢的瞬間啄骇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工瘟斜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人螺句。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蛇尚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子取劫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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