日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

文本抓取利器,Python和Beautiful Soup爬蟲助你事半功倍

來源: 責(zé)編: 時間:2023-12-09 15:21:57 308觀看
導(dǎo)讀一、簡介網(wǎng)絡(luò)爬蟲是一項非常搶手的技能。收集、分析和清洗數(shù)據(jù)是數(shù)據(jù)科學(xué)項目中最重要的部分。今天介紹如何從鏈接中爬取高質(zhì)量文本內(nèi)容,我們使用迭代,從大約700個鏈接中進(jìn)行網(wǎng)絡(luò)爬取。如果想直接跳轉(zhuǎn)到代碼部分,可以在

一、簡介

網(wǎng)絡(luò)爬蟲是一項非常搶手的技能。收集、分析和清洗數(shù)據(jù)是數(shù)據(jù)科學(xué)項目中最重要的部分。4Um28資訊網(wǎng)——每日最新資訊28at.com

今天介紹如何從鏈接中爬取高質(zhì)量文本內(nèi)容,我們使用迭代,從大約700個鏈接中進(jìn)行網(wǎng)絡(luò)爬取。4Um28資訊網(wǎng)——每日最新資訊28at.com

如果想直接跳轉(zhuǎn)到代碼部分,可以在下方鏈接GitHub倉庫中找到,同時還會找到一個包含將爬取的700個鏈接的.csv數(shù)據(jù)集!4Um28資訊網(wǎng)——每日最新資訊28at.com

【GitHub】:https://github.com/StefanSilver3/MediumArticlesCode-byStefanSilver/tree/main/WebScraping4Um28資訊網(wǎng)——每日最新資訊28at.com

二、從單個鏈接進(jìn)行網(wǎng)頁抓取

首先,導(dǎo)入所需的庫。4Um28資訊網(wǎng)——每日最新資訊28at.com

from bs4 import BeautifulSoupimport requestsfrom bs4.element import Commentimport urllib.request

如果還沒有安裝BeautifulSoup庫,可以直接在Python代碼中這樣做。4Um28資訊網(wǎng)——每日最新資訊28at.com

pip install beautifulsoup4

然后,開始編碼。這里定義兩個函數(shù),一個用于檢查要排除的內(nèi)容,另一個用于從網(wǎng)站上爬取內(nèi)容。4Um28資訊網(wǎng)——每日最新資訊28at.com

第一個函數(shù)用于查找要排除的元素,代碼如下。4Um28資訊網(wǎng)——每日最新資訊28at.com

# 要從提取的文本中過濾的標(biāo)簽def tag_visible(element):    if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']:        return False    if isinstance(element, Comment):        return False    return True

第二個函數(shù)將使用這個函數(shù),以確保所有的無用內(nèi)容都從最終結(jié)果中排除,代碼如下。4Um28資訊網(wǎng)——每日最新資訊28at.com

# 從網(wǎng)頁文本中過濾前一個函數(shù)中提到的所有標(biāo)簽的函數(shù)def text_from_html(body):    soup = BeautifulSoup(body, 'html.parser')    texts = soup.findAll(string=True)    visible_texts = filter(tag_visible, texts)      return u" ".join(t.strip() for t in visible_texts)

接著,可以在一個新鏈接上測試這兩個函數(shù)。你可以放置任意鏈接,不需要使用下面的鏈接。4Um28資訊網(wǎng)——每日最新資訊28at.com

html = urllib.request.urlopen('https://www.artificialintelligence-news.com/2023/11/20/microsoft-recruits-former-openai-ceo-sam-altman-co-founder-greg-brockman/').read()print(text_from_html(html))

網(wǎng)絡(luò)爬取的內(nèi)容將會像下面的文本一樣。4Um28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4Um28資訊網(wǎng)——每日最新資訊28at.com

截圖1:爬取的網(wǎng)站——隨機(jī)鏈接4Um28資訊網(wǎng)——每日最新資訊28at.com

注意,一些網(wǎng)站會檢測到網(wǎng)絡(luò)爬取活動,并阻止網(wǎng)絡(luò)爬取嘗試。如果發(fā)生這種情況,將收到一個403錯誤,這是“禁止”的代碼。4Um28資訊網(wǎng)——每日最新資訊28at.com

三、同時爬取多個鏈接

測試了簡單的提取函數(shù),接下來對提供的鏈接數(shù)據(jù)集的所有鏈接進(jìn)行迭代提取。4Um28資訊網(wǎng)——每日最新資訊28at.com

首先,確保獲取了在GitHub倉庫中找到的數(shù)據(jù)集。然后,讀取數(shù)據(jù)集并將列名更改為Link,原本的列名是max(page)。4Um28資訊網(wǎng)——每日最新資訊28at.com

df = pd.read_csv("furniture_stores_pages.csv")df.rename(columns={"max(page)":"Link"}, inplace=1)

現(xiàn)在,創(chuàng)建一個以0為起始值的變量x,它將在列表中的每個鏈接上進(jìn)行迭代。當(dāng)然元素變量也可以使用。4Um28資訊網(wǎng)——每日最新資訊28at.com

x=0df_cnotallow=[]for element in df.iterrows():    try:        url = df["Link"][x]        scraped_text = urllib.request.urlopen(url).read()        df_contents.append(text_from_html(scraped_text))        x=x+1    except:        print("(",x,")","This website could not be scraped-> ",df["Link"][x])        x=x+1

然后,定義一個名為df_contents的列表,它將包含從每個網(wǎng)頁中提取的所有可以爬取的文本。4Um28資訊網(wǎng)——每日最新資訊28at.com

接下來,遍歷每個元素,如果可以訪問且包含相關(guān)數(shù)據(jù),就從中提取信息。這只是對隨機(jī)鏈接進(jìn)行上述測試,但測試的對象是提供的數(shù)據(jù)集中的所有鏈接。4Um28資訊網(wǎng)——每日最新資訊28at.com

代碼中還使用了try-except對無法提取的鏈接進(jìn)行跳過。4Um28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在,檢查新列表(df_contents)的長度,查看提取了多少鏈接。4Um28資訊網(wǎng)——每日最新資訊28at.com

len(df_contents)

這個函數(shù)返回268,這意味著在700多個網(wǎng)站中只有268個爬取成功。然后,可以使用下面的代碼訪問并打印第一個被爬取的網(wǎng)站。4Um28資訊網(wǎng)——每日最新資訊28at.com

df_contents[0]

這將打印第一個文本,示例如下所示(簡短版本):4Um28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4Um28資訊網(wǎng)——每日最新資訊28at.com

截圖2:從數(shù)據(jù)集中爬取的網(wǎng)站4Um28資訊網(wǎng)——每日最新資訊28at.com

如果需要的話,也可以使用下面的代碼反復(fù)打印。每打印完一個元素后,都需要輸入任意字符以繼續(xù),這樣就可以逐一檢查每個提取的網(wǎng)站。4Um28資訊網(wǎng)——每日最新資訊28at.com

count = 0for element in df_contents:    print(df_contents[count])    print("/n /n---------------------------------------------------------------------------------------- /n /n")        print("Press any key to continue to print df_contents [",count+1,"]")    input()    count= count+1

本文鏈接:http://www.www897cc.com/showinfo-26-40655-0.html文本抓取利器,Python和Beautiful Soup爬蟲助你事半功倍

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 微軟:VS Code已成為Java巨頭!

下一篇: Java高并發(fā)詳解,死鎖的成因與解決方法

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 陇南市| 西峡县| 佛学| 梅河口市| 石渠县| 淮安市| 府谷县| 洞头县| 东丰县| 出国| 天全县| 包头市| 株洲县| 武义县| 九龙坡区| 凭祥市| 临澧县| 武强县| 登封市| 咸阳市| 旬阳县| 淮北市| 新沂市| 若尔盖县| 宣化县| 如皋市| 清流县| 新蔡县| 碌曲县| 河北省| 襄汾县| 准格尔旗| 斗六市| 新和县| 邹平县| 阳朔县| 阿瓦提县| 北京市| 新疆| 广宁县| 琼海市|