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

當前位置:首頁 > 科技  > 軟件

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

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

一、簡介

網絡爬蟲是一項非常搶手的技能。收集、分析和清洗數據是數據科學項目中最重要的部分。SpL28資訊網——每日最新資訊28at.com

今天介紹如何從鏈接中爬取高質量文本內容,我們使用迭代,從大約700個鏈接中進行網絡爬取。SpL28資訊網——每日最新資訊28at.com

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

【GitHub】:https://github.com/StefanSilver3/MediumArticlesCode-byStefanSilver/tree/main/WebScrapingSpL28資訊網——每日最新資訊28at.com

二、從單個鏈接進行網頁抓取

首先,導入所需的庫。SpL28資訊網——每日最新資訊28at.com

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

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

pip install beautifulsoup4

然后,開始編碼。這里定義兩個函數,一個用于檢查要排除的內容,另一個用于從網站上爬取內容。SpL28資訊網——每日最新資訊28at.com

第一個函數用于查找要排除的元素,代碼如下。SpL28資訊網——每日最新資訊28at.com

# 要從提取的文本中過濾的標簽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

第二個函數將使用這個函數,以確保所有的無用內容都從最終結果中排除,代碼如下。SpL28資訊網——每日最新資訊28at.com

# 從網頁文本中過濾前一個函數中提到的所有標簽的函數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)

接著,可以在一個新鏈接上測試這兩個函數。你可以放置任意鏈接,不需要使用下面的鏈接。SpL28資訊網——每日最新資訊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))

網絡爬取的內容將會像下面的文本一樣。SpL28資訊網——每日最新資訊28at.com

圖片圖片SpL28資訊網——每日最新資訊28at.com

截圖1:爬取的網站——隨機鏈接SpL28資訊網——每日最新資訊28at.com

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

三、同時爬取多個鏈接

測試了簡單的提取函數,接下來對提供的鏈接數據集的所有鏈接進行迭代提取。SpL28資訊網——每日最新資訊28at.com

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

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

現在,創建一個以0為起始值的變量x,它將在列表中的每個鏈接上進行迭代。當然元素變量也可以使用。SpL28資訊網——每日最新資訊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的列表,它將包含從每個網頁中提取的所有可以爬取的文本。SpL28資訊網——每日最新資訊28at.com

接下來,遍歷每個元素,如果可以訪問且包含相關數據,就從中提取信息。這只是對隨機鏈接進行上述測試,但測試的對象是提供的數據集中的所有鏈接。SpL28資訊網——每日最新資訊28at.com

代碼中還使用了try-except對無法提取的鏈接進行跳過。SpL28資訊網——每日最新資訊28at.com

現在,檢查新列表(df_contents)的長度,查看提取了多少鏈接。SpL28資訊網——每日最新資訊28at.com

len(df_contents)

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

df_contents[0]

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

圖片圖片SpL28資訊網——每日最新資訊28at.com

截圖2:從數據集中爬取的網站SpL28資訊網——每日最新資訊28at.com

如果需要的話,也可以使用下面的代碼反復打印。每打印完一個元素后,都需要輸入任意字符以繼續,這樣就可以逐一檢查每個提取的網站。SpL28資訊網——每日最新資訊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爬蟲助你事半功倍

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

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

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

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 徐州市| 新源县| 乌审旗| 北宁市| 镇康县| 霍林郭勒市| 桓仁| 宁安市| 曲沃县| 宜春市| 清水河县| 彭州市| 宁夏| 双柏县| 涟源市| 建瓯市| 乌苏市| 鹤岗市| 三门峡市| 四子王旗| 鄱阳县| 漳州市| 湖北省| 闵行区| 沾益县| 于田县| 高邑县| 阿城市| 天长市| 新乡市| 赫章县| 织金县| 无棣县| 衡东县| 咸丰县| 大田县| 宜阳县| 竹山县| 白河县| 桃源县| 沧源|