python爬虫提取人名_python爬虫—爬取英文名以及正则表达式的介绍
python爬蟲(chóng)—爬取英文名以及正則表達(dá)式的介紹
爬取英文名:
一. 爬蟲(chóng)模塊詳細(xì)設(shè)計(jì)
(1)整體思路
對(duì)于本次爬取英文名數(shù)據(jù)的爬蟲(chóng)實(shí)現(xiàn),我的思路是先將A-Z所有英文名的連接爬取出來(lái),保存在一個(gè)csv文件中;再讀取csv文件當(dāng)中的每個(gè)英文名鏈接,采用循環(huán)的方法讀取每一個(gè)英文名鏈接,根據(jù)每個(gè)英文名鏈接爬取每個(gè)鏈接中的數(shù)據(jù),保存在新的csv文件當(dāng)中。
需要寫一個(gè)爬取英文名鏈接的函數(shù)、將爬取的內(nèi)容保存在csv文件的函數(shù)以及讀取csv文件內(nèi)容的函數(shù)、爬取英文名詳情頁(yè)內(nèi)容的函數(shù)。
表5.3.1
函數(shù)名
作用
def get_nameLink():
爬取英文名鏈接
def save_to_csv(dict,filename):
將爬取的內(nèi)容以字典的形式保存在csv文件
def get_WebLinkcsv(name):
讀取csv文件的內(nèi)容
def get_namedata():
根據(jù)鏈接爬取每個(gè)英文名的具體數(shù)據(jù)
(2)爬取英文名鏈接
首先觀察A-Z英文名的網(wǎng)頁(yè)的內(nèi)容,發(fā)現(xiàn)每個(gè)字母都對(duì)應(yīng)一個(gè)網(wǎng)站,剛打開(kāi)網(wǎng)站只會(huì)顯示三個(gè)模塊的英文名,每個(gè)模塊30個(gè)英文名;關(guān)于一個(gè)字母的更多的英文名是根據(jù)鼠標(biāo)的移動(dòng)再進(jìn)行動(dòng)態(tài)的加載才會(huì)在網(wǎng)頁(yè)上顯示出來(lái);但每個(gè)字母的英文名不同的網(wǎng)頁(yè)上顯示。如圖:
經(jīng)觀察,每個(gè)字母的所有英文名都可以根據(jù)頁(yè)數(shù)來(lái)確定,可以不用動(dòng)態(tài)爬取的方法,根據(jù)觀察每個(gè)字母的英文名頁(yè)數(shù)來(lái)確定每個(gè)字母英文名的數(shù)量進(jìn)行爬取鏈接。鏈接格式為:
https://www.thebump.com/b/baby-girl-names-that-start-with-{letter}?sort_by=popular&page={number}&page_size=30&gender=&request-by-ajax=true
Letter表示A-Z的字母,number表示頁(yè)數(shù),page_size表示每個(gè)頁(yè)面所顯示的英文名數(shù)量為30個(gè)。
代碼如下:
(3) 爬取詳情頁(yè)
打開(kāi)某個(gè)英文名對(duì)應(yīng)的詳情頁(yè),右鍵點(diǎn)開(kāi)查看需要爬取內(nèi)容的審查元素,觀察每個(gè)模塊內(nèi)容所對(duì)應(yīng)的標(biāo)簽進(jìn)行解析。經(jīng)觀察,有的英文名存在Celebrity模塊,有的英文名不存在Celebrity模塊,就需要進(jìn)行判斷,若存在就解析保存在csv文件中,不存在顯示為空跳過(guò),繼續(xù)解析下一個(gè)內(nèi)容。如圖:
Abigail名字中就有Celebrity模塊的內(nèi)容,Annabelle名字中就沒(méi)有這個(gè)Celebrity中的內(nèi)容,這種情況下,就會(huì)存入空的內(nèi)容。
代碼如下:
采用try except進(jìn)行異常處理。
(4)存儲(chǔ)內(nèi)容
采用字典的形式存入內(nèi)容保存在csv文件當(dāng)中。字典(dictionary)是Python中另一個(gè)非常有用的內(nèi)置數(shù)據(jù)類型,列表是有序的對(duì)象結(jié)合,字典是無(wú)序的對(duì)象集合。兩者之間的區(qū)別在于:字典當(dāng)中的元素是通過(guò)鍵來(lái)存取的,而不是通過(guò)偏移存取;字典是一種映射類型,字典用“{ }”標(biāo)識(shí),它是一個(gè)無(wú)序的鍵(key)、值(value)對(duì)集合,鍵(key)必須使用不可變類型。
def save_to_csv(dict,filename)函數(shù)表示存儲(chǔ)數(shù)據(jù),使用字典形式存儲(chǔ),因?yàn)楸敬螌?shí)驗(yàn)數(shù)據(jù)較大,不能一次性爬取,所以在爬取內(nèi)容的時(shí)候都是分開(kāi)爬的,對(duì)于數(shù)據(jù)的存儲(chǔ)也是采用追加的方式進(jìn)行存取的。
如圖:
(5)讀取文件
讀取文件主要是用來(lái)讀取名字鏈接,根據(jù)名字鏈接進(jìn)行詳情頁(yè)的爬取
二. 調(diào)試與測(cè)試
(1) 調(diào)試過(guò)程中遇到的問(wèn)題
(1)在爬取關(guān)于A的英文名鏈接的時(shí)候,只出現(xiàn)了90個(gè)鏈接,剩下的爬不出來(lái),但在網(wǎng)頁(yè)中剩下的英文名可以根據(jù)鼠標(biāo)的滑動(dòng)進(jìn)行加載出現(xiàn)在網(wǎng)頁(yè)中,經(jīng)觀察可以根據(jù)此鏈接https://www.thebump.com/b/baby-girl-names-that-start-with-{letter}?sort_by=popular&page={number}&page_size=30&gender=&request-by-ajax=true,進(jìn)行獲取每個(gè)英文名的爬取以及對(duì)每個(gè)字母的英文名數(shù)量進(jìn)行確認(rèn);用此url形式就相當(dāng)于是進(jìn)行翻頁(yè)操作,每一頁(yè)只有30個(gè)英文名。
(2)在運(yùn)行的過(guò)程中會(huì)顯示縮緊錯(cuò)誤,但在觀察過(guò)程中,并沒(méi)有縮進(jìn)的錯(cuò)誤,在網(wǎng)上查詢得只是因?yàn)樵诙x一個(gè)函數(shù)時(shí),函數(shù)里面沒(méi)有內(nèi)容才會(huì)報(bào)此錯(cuò)誤。
(3)在進(jìn)行幾次爬取過(guò)程中,會(huì)經(jīng)常在某一個(gè)固定的地方停止爬取,經(jīng)多次修改,最終發(fā)現(xiàn)是請(qǐng)求頭的問(wèn)題。
(2)爬取顯示
爬取的內(nèi)容會(huì)保存在csv文件當(dāng)中,如圖:
三 課程設(shè)計(jì)心得與體會(huì)
(1) 通過(guò)這次課程設(shè)計(jì),使我更加扎實(shí)的掌握了有關(guān)Python方面的知識(shí),在設(shè)計(jì)過(guò)程中,雖然遇到了一些問(wèn)題,但經(jīng)過(guò)一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識(shí)欠缺以及經(jīng)驗(yàn)不足。實(shí)踐出真知,通過(guò)親自動(dòng)手設(shè)計(jì),使我們找你哥我的知識(shí)不再是紙上談兵。
(2) 過(guò)而能改,善莫大焉。在課程設(shè)計(jì)過(guò)程中,我們不斷發(fā)現(xiàn)錯(cuò)誤,不斷改正,不斷領(lǐng)悟,不斷獲取。最終的檢測(cè)調(diào)試環(huán)節(jié),本身就是在實(shí)踐“過(guò)而能改,善莫大焉”的知行觀。這次的課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多問(wèn)題,最后在同學(xué)們的幫助下迎刃而解,這也告訴我們,在今后的社會(huì)發(fā)展和學(xué)習(xí)實(shí)踐過(guò)程中,一定要不懈努力,不能遇到問(wèn)題就想到要退縮,一定要不厭其煩的發(fā)現(xiàn)問(wèn)題所在,然后一一解決,只有這樣才能成功的做成想做的事,才能在今后的道路上披荊斬棘,而不是知難而退,那樣永遠(yuǎn)不可能收獲成功,收獲喜悅,也永遠(yuǎn)不可能得到社會(huì)及他人的認(rèn)可。
(3) 課程設(shè)計(jì)誠(chéng)然是一門專業(yè)課,給我很多專業(yè)知識(shí)以及專業(yè)技能上的提升,同時(shí)又是一門思辨課,給了我許多道,很多思。是我對(duì)抽象理論有了具體的認(rèn)識(shí)。通過(guò)這次課程設(shè)計(jì),我對(duì)正則表達(dá)式有了更深一步的理解運(yùn)用,通過(guò)查詢資料也了解了Python的爬蟲(chóng)原理。我認(rèn)為,在這學(xué)期的實(shí)驗(yàn)中,不僅培養(yǎng)了獨(dú)立思考、動(dòng)手操作能力,在各種其他能力上也都有了提高。更重要的是,在課程設(shè)計(jì)學(xué)習(xí)中,我學(xué)會(huì)了很多學(xué)習(xí)方法,而這是日后最實(shí)用的,真的是受益匪淺。要面對(duì)社會(huì)的挑戰(zhàn),只有不斷的學(xué)習(xí)、實(shí)踐。在學(xué)習(xí)、在實(shí)踐。這對(duì)于我們的將來(lái)也有很大的幫助。
正則表達(dá)式:
一:什么是正則表達(dá)式
正則表達(dá)式,又稱規(guī)則表達(dá)式,通常被用來(lái)檢索、替換那些符合某個(gè)模式(規(guī)則)的文本。
正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯。
給定一個(gè)正則表達(dá)式和另一個(gè)字符串,我們可以達(dá)到如下的目的:
給定的字符串是否符合正則表達(dá)式的過(guò)濾邏輯(“匹配”);
通過(guò)正則表達(dá)式,從文本字符串中獲取我們想要的特定部分(“過(guò)濾”)。
二:爬蟲(chóng)的四個(gè)主要步驟
明確目標(biāo) (要知道你準(zhǔn)備在哪個(gè)范圍或者網(wǎng)站去搜索)
爬 (將所有的網(wǎng)站的內(nèi)容全部爬下來(lái))
取 (過(guò)濾和匹配我們需要的數(shù)據(jù),去掉沒(méi)用的數(shù)據(jù))
處理數(shù)據(jù)(按照我們想要的方式存儲(chǔ)和使用)
三:正則表達(dá)式匹配規(guī)則
元字符說(shuō)明
.
代表任意字符
\
[ ]
匹配內(nèi)部的任一字符或子表達(dá)式
[^]
對(duì)字符集和取非
-
定義一個(gè)區(qū)間
\
對(duì)下一字符取非(通常是普通變特殊,特殊變普通)
*
匹配前面的字符或者子表達(dá)式0次或多次
*?
惰性匹配上一個(gè)
+
匹配前一個(gè)字符或子表達(dá)式一次或多次
+?
惰性匹配上一個(gè)
?
匹配前一個(gè)字符或子表達(dá)式0次或1次重復(fù)
{n}
匹配前一個(gè)字符或子表達(dá)式
{m,n}
匹配前一個(gè)字符或子表達(dá)式至少m次至多n次
{n,}
匹配前一個(gè)字符或者子表達(dá)式至少n次
{n,}?
前一個(gè)的惰性匹配
^
匹配字符串的開(kāi)頭
\A
匹配字符串開(kāi)頭
$
匹配字符串結(jié)束
[\b]
退格字符
\c
匹配一個(gè)控制字符
\d
匹配任意數(shù)字
\D
匹配數(shù)字以外的字符
\t
匹配制表符
\w
匹配任意數(shù)字字母下劃線
\W
不匹配數(shù)字字母下劃線
四.正則表達(dá)式例子
總結(jié)
以上是生活随笔為你收集整理的python爬虫提取人名_python爬虫—爬取英文名以及正则表达式的介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用python下载文件_详解使用Pyt
- 下一篇: linux下使用python_Pytho