自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 前端
今天介紹如何從鏈接中爬取高質(zhì)量文本內(nèi)容,我們使用迭代,從大約700個(gè)鏈接中進(jìn)行網(wǎng)絡(luò)爬取。如果想直接跳轉(zhuǎn)到代碼部分,可以在下方鏈接GitHub倉(cāng)庫(kù)中找到,同時(shí)還會(huì)找到一個(gè)包含將爬取的700個(gè)鏈接的.csv數(shù)據(jù)集!

一、簡(jiǎn)介

網(wǎng)絡(luò)爬蟲是一項(xiàng)非常搶手的技能。收集、分析和清洗數(shù)據(jù)是數(shù)據(jù)科學(xué)項(xiàng)目中最重要的部分。

今天介紹如何從鏈接中爬取高質(zhì)量文本內(nèi)容,我們使用迭代,從大約700個(gè)鏈接中進(jìn)行網(wǎng)絡(luò)爬取。

如果想直接跳轉(zhuǎn)到代碼部分,可以在下方鏈接GitHub倉(cāng)庫(kù)中找到,同時(shí)還會(huì)找到一個(gè)包含將爬取的700個(gè)鏈接的.csv數(shù)據(jù)集!

【GitHub】:https://github.com/StefanSilver3/MediumArticlesCode-byStefanSilver/tree/main/WebScraping

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

首先,導(dǎo)入所需的庫(kù)。

from bs4 import BeautifulSoup
import requests
from bs4.element import Comment
import urllib.request

如果還沒(méi)有安裝BeautifulSoup庫(kù),可以直接在Python代碼中這樣做。

pip install beautifulsoup4

然后,開始編碼。這里定義兩個(gè)函數(shù),一個(gè)用于檢查要排除的內(nèi)容,另一個(gè)用于從網(wǎng)站上爬取內(nèi)容。

第一個(gè)函數(shù)用于查找要排除的元素,代碼如下。

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

第二個(gè)函數(shù)將使用這個(gè)函數(shù),以確保所有的無(wú)用內(nèi)容都從最終結(jié)果中排除,代碼如下。

# 從網(wǎng)頁(yè)文本中過(guò)濾前一個(gè)函數(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)

接著,可以在一個(gè)新鏈接上測(cè)試這兩個(gè)函數(shù)。你可以放置任意鏈接,不需要使用下面的鏈接。

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)容將會(huì)像下面的文本一樣。

圖片圖片

截圖1:爬取的網(wǎng)站——隨機(jī)鏈接

注意,一些網(wǎng)站會(huì)檢測(cè)到網(wǎng)絡(luò)爬取活動(dòng),并阻止網(wǎng)絡(luò)爬取嘗試。如果發(fā)生這種情況,將收到一個(gè)403錯(cuò)誤,這是“禁止”的代碼。

三、同時(shí)爬取多個(gè)鏈接

測(cè)試了簡(jiǎn)單的提取函數(shù),接下來(lái)對(duì)提供的鏈接數(shù)據(jù)集的所有鏈接進(jìn)行迭代提取。

首先,確保獲取了在GitHub倉(cāng)庫(kù)中找到的數(shù)據(jù)集。然后,讀取數(shù)據(jù)集并將列名更改為L(zhǎng)ink,原本的列名是max(page)。

df = pd.read_csv("furniture_stores_pages.csv")

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

現(xiàn)在,創(chuàng)建一個(gè)以0為起始值的變量x,它將在列表中的每個(gè)鏈接上進(jìn)行迭代。當(dāng)然元素變量也可以使用。

x=0
df_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

然后,定義一個(gè)名為df_contents的列表,它將包含從每個(gè)網(wǎng)頁(yè)中提取的所有可以爬取的文本。

接下來(lái),遍歷每個(gè)元素,如果可以訪問(wèn)且包含相關(guān)數(shù)據(jù),就從中提取信息。這只是對(duì)隨機(jī)鏈接進(jìn)行上述測(cè)試,但測(cè)試的對(duì)象是提供的數(shù)據(jù)集中的所有鏈接。

代碼中還使用了try-except對(duì)無(wú)法提取的鏈接進(jìn)行跳過(guò)。

現(xiàn)在,檢查新列表(df_contents)的長(zhǎng)度,查看提取了多少鏈接。

len(df_contents)

這個(gè)函數(shù)返回268,這意味著在700多個(gè)網(wǎng)站中只有268個(gè)爬取成功。然后,可以使用下面的代碼訪問(wèn)并打印第一個(gè)被爬取的網(wǎng)站。

df_contents[0]

這將打印第一個(gè)文本,示例如下所示(簡(jiǎn)短版本):

圖片圖片

截圖2:從數(shù)據(jù)集中爬取的網(wǎng)站

如果需要的話,也可以使用下面的代碼反復(fù)打印。每打印完一個(gè)元素后,都需要輸入任意字符以繼續(xù),這樣就可以逐一檢查每個(gè)提取的網(wǎng)站。

count = 0
for 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
責(zé)任編輯:武曉燕 來(lái)源: Python學(xué)研大本營(yíng)
相關(guān)推薦

2021-12-16 15:09:45

PythonBeautiful S編程語(yǔ)言

2023-11-28 08:34:39

Python工具

2022-06-28 13:41:07

瀏覽網(wǎng)頁(yè)互聯(lián)網(wǎng)交互Python

2024-04-30 09:33:00

JavaScriptPythonexecjs

2023-01-04 17:59:00

BeautifulPython

2019-06-18 10:49:41

Python技術(shù)web

2023-11-16 18:17:13

Python編程內(nèi)置模塊

2024-01-02 18:03:42

編程語(yǔ)言Python

2018-12-17 09:00:00

大數(shù)據(jù)數(shù)據(jù)科學(xué)工具

2018-04-20 17:25:46

Python爬蟲智聯(lián)招聘

2023-03-30 10:22:42

數(shù)據(jù)處理前端

2017-04-06 11:12:38

JavaScriptGoogle爬蟲

2017-09-08 15:04:10

jQuery爬蟲PyQuery

2022-06-27 09:23:14

爬蟲frida rpc加密

2024-01-03 18:45:35

Pandas繪圖函數(shù)

2023-11-27 08:51:46

PythonRequests庫(kù)

2017-12-20 09:35:25

Python爬蟲百度云資源

2022-03-10 16:01:29

Playwright開源

2024-12-24 15:25:06

2024-11-27 06:31:02

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)