1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一個(gè)入門(mén)級(jí)python爬蟲(chóng)教程詳解

        共 3298字,需瀏覽 7分鐘

         ·

        2021-01-29 13:06


        這篇文章主要介紹了一個(gè)入門(mén)級(jí)python爬蟲(chóng)教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

        前言

        本文目的:根據(jù)本人的習(xí)慣與理解,用最簡(jiǎn)潔的表述,介紹爬蟲(chóng)的定義、組成部分、爬取流程,并講解示例代碼。

        基礎(chǔ)

        爬蟲(chóng)的定義:定向抓取互聯(lián)網(wǎng)內(nèi)容(大部分為網(wǎng)頁(yè))、并進(jìn)行自動(dòng)化數(shù)據(jù)處理的程序。主要用于對(duì)松散的海量信息進(jìn)行收集和結(jié)構(gòu)化處理,為數(shù)據(jù)分析和挖掘提供原材料。

        今日t條就是一只巨大的“爬蟲(chóng)”。

        爬蟲(chóng)由URL庫(kù)、采集器、解析器組成。

        流程

        如果待爬取的url庫(kù)不為空,采集器會(huì)自動(dòng)爬取相關(guān)內(nèi)容,并將結(jié)果給到解析器,解析器提取目標(biāo)內(nèi)容后進(jìn)行寫(xiě)入文件或入庫(kù)等操作。

        代碼

        第一步:寫(xiě)一個(gè)采集器

        如下是一個(gè)比較簡(jiǎn)單的采集器函數(shù)。需要用到requests庫(kù)。
        首先,構(gòu)造一個(gè)http的header,里面有瀏覽器和操作系統(tǒng)等信息。如果沒(méi)有這個(gè)偽造的header,可能會(huì)被目標(biāo)網(wǎng)站的WAF等防護(hù)設(shè)備識(shí)別為機(jī)器代碼并干掉。

        然后,用requests庫(kù)的get方法獲取url內(nèi)容。如果http響應(yīng)代碼是200 ok,說(shuō)明頁(yè)面訪問(wèn)正常,將該函數(shù)返回值設(shè)置為文本形式的html代碼內(nèi)容。

        如果響應(yīng)代碼不是200 ok,說(shuō)明頁(yè)面不能正常訪問(wèn),將函數(shù)返回值設(shè)置為特殊字符串或代碼。

        1. import?requests

        2. ?

        3. def?get_page(url):

        4. headers?=?{'User-Agent':?'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}

        5. response?=?requests.get(url,?headers=?headers)

        6. if?response.status_code?==?200:

        7. return?response.text

        8. else:

        9. return?'GET HTML ERROR !'

        第二步:解析器

        解析器的作用是對(duì)采集器返回的html代碼進(jìn)行過(guò)濾篩選,提取需要的內(nèi)容。
        作為一個(gè)14年忠實(shí)用戶,當(dāng)然要用豆瓣舉個(gè)栗子 _

        我們計(jì)劃爬取豆瓣排名TOP250電影的8個(gè)參數(shù):排名、電影url鏈接、電影名稱、導(dǎo)演、上映年份、國(guó)家、影片類(lèi)型、評(píng)分。整理成字典并寫(xiě)入文本文件。

        待爬取的頁(yè)面如下,每個(gè)頁(yè)面包括25部電影,共計(jì)10個(gè)頁(yè)面。

        在這里,必須要表?yè)P(yáng)豆瓣的前端工程師們,html標(biāo)簽排版非常工整具有層次,非常便于信息提取。

        下面是“肖申克的救贖”所對(duì)應(yīng)的html代碼:(需要提取的8個(gè)參數(shù)用紅線標(biāo)注)

        根據(jù)上面的html編寫(xiě)解析器函數(shù),提取8個(gè)字段。該函數(shù)返回值是一個(gè)可迭代的序列。
        我個(gè)人喜歡用re(正則表達(dá)式)提取內(nèi)容。8個(gè)(.*?)分別對(duì)應(yīng)需要提取的字段。

        1. import?re

        2. ?

        3. def?parse_page(html):

        4. pattern?=?re.compile('(.*?).*?.*?(.*?).*?

        5. items?=?re.findall(pattern?,?html)

        6. for?item?in?items:

        7. yield?{

        8. 'rank':?item[0],

        9. 'href':?item[1],

        10. 'name':?item[2],

        11. 'director':?item[3].strip()[4:],

        12. 'year':?item[4].strip(),

        13. 'country':?item[5].strip(),

        14. 'style':?item[6].strip(),

        15. 'score':?item[7].strip()

        16. }

        提取后的內(nèi)容如下:

        整理成完整的代碼:(暫不考慮容錯(cuò))

        1. import?requests

        2. import?re

        3. import?json

        4. ?

        5. def?get_page(url):

        6. #采集器函數(shù)

        7. headers?=?{'User-Agent':?'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}

        8. response?=?requests.get(url,?headers=?headers)

        9. if?response.status_code?==?200:

        10. return?response.text

        11. else:

        12. return?'GET HTML ERROR ! '

        13. ?

        14. ?

        15. def?parse_page(html):

        16. #解析器函數(shù)

        17. pattern?=?re.compile('(.*?).*?.*?(.*?).*?

        18. items?=?re.findall(pattern?,?html)

        19. for?item?in?items:

        20. yield?{

        21. 'rank':?item[0],

        22. 'href':?item[1],

        23. 'name':?item[2],

        24. 'director':?item[3].strip()[4:],

        25. 'year':?item[4].strip(),

        26. 'country':?item[5].strip(),

        27. 'style':?item[6].strip(),

        28. 'score':?item[7].strip()

        29. }

        30. ?

        31. ?

        32. def?write_to_file(content):

        33. #寫(xiě)入文件函數(shù)

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

        35. file.write(json.dumps(content?,?ensure_ascii?=?False)?+?'\n')

        36. ?

        37. ?

        38. if?__name__==?"__main__":

        39. # 主程序

        40. for?i?in?range(10):

        41. url=?'https://movie.douban.com/top250?start='+?str(i*25)+?'&filter'

        42. for?res?in?parse_page(get_page(url)):

        43. write_to_file(res)

        非常簡(jiǎn)潔,非常符合python簡(jiǎn)單、高效的特點(diǎn)。

        說(shuō)明:

        需要掌握待爬取url的規(guī)律,才能利用for循環(huán)等操作自動(dòng)化處理。
        前25部影片的url是https://movie.douban.com/top250?start=0&filter,第26-50部影片url是https://movie.douban.com/top250?start=25&filter。規(guī)律就在start參數(shù),將start依次設(shè)置為0、25、50、75。。。225,就能獲取所有頁(yè)面的鏈接。parse_page函數(shù)的返回值是一個(gè)可迭代序列,可以理解為字典的集合。運(yùn)行完成后,會(huì)在程序同目錄生成result.txt文件。內(nèi)容如下:

        到此這篇關(guān)于一個(gè)入門(mén)級(jí)python爬蟲(chóng)教程詳解的文章就介紹到這了!

        掃下方二維碼加老師微信

        或是搜索老師微信號(hào):XTUOL1988【切記備注學(xué)習(xí)Python】

        領(lǐng)取Python web開(kāi)發(fā),Python爬蟲(chóng),Python數(shù)據(jù)分析,人工智能等學(xué)習(xí)教程。帶你從零基礎(chǔ)系統(tǒng)性的學(xué)好Python!

        也可以加老師建的Python技術(shù)學(xué)習(xí)教程qq裙:245345507,二者加一個(gè)就可以!

        歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持


        萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

        *聲明:本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來(lái)源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜



        瀏覽 47
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            俺去在线 | 欧美日韩在线手机 | 亚洲第一国产 黄AV动漫软件 | 欧美色图视频一区 | 午夜精品视频在线观看 | 香蕉午夜 | 大操视频网站 | 伊人A片 91免费国产视频 丁香五月婷婷基地 | 偷拍乱码在线一区二区 | 817成人免费A片在线观看 |