python提取网页中p标签中的内容_使用Python进行爬虫的初学者指南
前言
爬蟲是一種從網(wǎng)站上抓取大量數(shù)據(jù)的自動化方法。即使是復(fù)制和粘貼你喜歡的網(wǎng)站上的引用或行,也是一種web抓取的形式。大多數(shù)網(wǎng)站不允許你保存他們網(wǎng)站上的數(shù)據(jù)供你使用。因此,唯一的選擇是手動復(fù)制數(shù)據(jù),這將消耗大量時間,甚至可能需要幾天才能完成。
網(wǎng)站上的數(shù)據(jù)大多是非結(jié)構(gòu)化的。Web抓取有助于將這些非結(jié)構(gòu)化數(shù)據(jù),并將其以自定義和結(jié)構(gòu)化的形式存儲到本地或數(shù)據(jù)庫中。如果您是為了學(xué)習(xí)的目的而抓取web頁面,那么您不太可能會遇到任何問題,在不違反服務(wù)條款的情況下,自己進(jìn)行一些web抓取來增強(qiáng)您的技能是一個很好的實踐。
爬蟲步驟
為什么使用Python進(jìn)行Web抓取?
Python速度快得令人難以置信,而且更容易進(jìn)行web抓取。由于太容易編碼,您可以使用簡單的小代碼來執(zhí)行大型任務(wù)。
如何進(jìn)行Web抓取?
我們需要運行web抓取的代碼,以便將請求發(fā)送到我們想要抓取的網(wǎng)站的URL。服務(wù)器發(fā)送數(shù)據(jù)并允許我們讀取HTML或XML頁面作為響應(yīng)。代碼解析HTML或XML頁面,查找數(shù)據(jù)并提取它們。
下面是使用Python使用Web抓取提取數(shù)據(jù)的步驟
用于Web抓取的庫
- Requests
- Beautiful Soup
- Pandas
- Tqdm
Requests是一個允許使用Python發(fā)送HTTP請求的模塊。HTTP請求用于返回一個包含所有響應(yīng)數(shù)據(jù)(如編碼、狀態(tài)、內(nèi)容等)的響應(yīng)對象
BeautifulSoup是一個用于從HTML和XML文件中提取數(shù)據(jù)的Python庫。這適用于您喜歡的解析器,以便提供導(dǎo)航、搜索和修改解析樹的慣用方法。它是專門為快速和高可靠的數(shù)據(jù)提取而設(shè)計的。
pandas是一個開源庫,它允許我們在Python web開發(fā)中執(zhí)行數(shù)據(jù)操作。它構(gòu)建在Numpy包上,其關(guān)鍵數(shù)據(jù)結(jié)構(gòu)稱為DataFrame。DataFrames允許我們在觀察數(shù)據(jù)行和變量列中存儲和操作表格數(shù)據(jù)。
Tqdm是另一個python庫,它可以迅速地使您的循環(huán)顯示一個智能進(jìn)度計—您所要做的就是用Tqdm(iterable)包裝任何可迭代的。
演示:抓取一個網(wǎng)站
Step 1. 尋找您想要抓取的URL
為了演示,我們將抓取網(wǎng)頁來提取手機(jī)的詳細(xì)信息。我使用了一個示例(www.example.com)來展示這個過程。
Stpe 2. 分析網(wǎng)站
數(shù)據(jù)通常嵌套在標(biāo)記中。分析和檢查我們想要獲取的數(shù)據(jù)被標(biāo)記在其下的頁面是嵌套的。要查看頁面,只需右鍵單擊元素,然后單擊“inspect”。一個小的檢查元件盒將被打開。您可以看到站點背后的原始代碼。現(xiàn)在你可以找到你想要刮的細(xì)節(jié)標(biāo)簽了。
您可以在控制臺的左上角找到一個箭頭符號。如果單擊箭頭,然后單擊產(chǎn)品區(qū)域,則特定產(chǎn)品區(qū)域的代碼將在console選項卡中突出顯示。
我們應(yīng)該做的第一件事是回顧和理解HTML的結(jié)構(gòu),因為從網(wǎng)站上獲取數(shù)據(jù)是非常重要的。網(wǎng)站頁面上會有很多代碼,我們需要包含我們數(shù)據(jù)的代碼。學(xué)習(xí)HTML的基礎(chǔ)知識將有助于熟悉HTML標(biāo)記。
Step 3.找到要提取的數(shù)據(jù)
我們將提取手機(jī)數(shù)據(jù),如產(chǎn)品名稱、實際價格、折扣價格等。您可以提取任何類型的數(shù)據(jù)。為此,我們必須找到包含我們的數(shù)據(jù)的標(biāo)記。
通過檢查元素的區(qū)域來打開控制臺。點擊左上角的箭頭,然后點擊產(chǎn)品。您現(xiàn)在將能夠看到我們點擊的產(chǎn)品的特定代碼。
Step 4. 編寫代碼
現(xiàn)在我們必須找出數(shù)據(jù)和鏈接的位置。讓我們開始代碼編寫。
創(chuàng)建一個名為scrap.py的文件,并在您選擇的任何編輯器中打開它。我們將使用pip安裝上面提到的四個Python庫。
第一個和主要的過程是訪問站點數(shù)據(jù)。我們已經(jīng)設(shè)置了該網(wǎng)站的URL,并訪問了該網(wǎng)站。
url?=?'https://www.example.com/products/mobiles-mobile-phones?sort=plrty'headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64)' 'AppleWebKit/537.36 (KHTML, like Gecko)' 'Chrome/64.0.3282.167 Safari/537.36' }result = requests.get(url, headers=headers,verify=True)Print(result)Output:
如果你看到上面的結(jié)果,那么你已經(jīng)成功訪問了這個網(wǎng)站。
Step 5. 運行代碼并從網(wǎng)站中提取數(shù)據(jù)
現(xiàn)在,我們將使用Beautifulsoup解析HTML。
soup = BeautifulSoup(result.content, 'html.parser')如果我們打印soup,然后我們將能夠看到整個網(wǎng)站頁面的HTML內(nèi)容。我們現(xiàn)在要做的就是過濾包含數(shù)據(jù)的部分。因此,我們將從soup中提取section標(biāo)記。
section=soup.find("section",?class_='js-section').find_all("div",{'class':'product-desc-rating})Print(section)結(jié)果如下:
現(xiàn)在,我們可以在div的“product-desc-rating”類中提取移動電話的詳細(xì)信息。我已經(jīng)為移動電話的每個列細(xì)節(jié)創(chuàng)建了一個列表,并使用for循環(huán)將其附加到該列表中。
Products = []url = []Actual_Price = []Discounted_Price = []Discount = []產(chǎn)品名稱出現(xiàn)在HTML中的p標(biāo)記(段落標(biāo)記)之下,而product_url則出現(xiàn)在錨標(biāo)記之下。
HTML錨標(biāo)記定義了一個超鏈接,將一個頁面鏈接到另一個頁面。它可以創(chuàng)建到另一個web頁面以及文件、位置或任何URL的超鏈接。“href”屬性是HTML標(biāo)記最重要的屬性。以及指向目標(biāo)頁面或URL的鏈接。
然后我們將提取實際價格和折扣價格,它們都出現(xiàn)在span標(biāo)簽中。標(biāo)簽用于對內(nèi)聯(lián)元素進(jìn)行分組。并且標(biāo)簽本身不提供任何視覺變化。最后,我們將從div標(biāo)簽中提取報價百分比。div標(biāo)記是塊級標(biāo)記。它是一個通用的容器標(biāo)簽。它用于HTML的各種標(biāo)記組,以便可以創(chuàng)建節(jié)并將樣式應(yīng)用于它們。
for t in tqdm(section): product_name = t.p.text Products.append(product_name) product_url = t.a['href'] url.append(product_url) original_price = t.span.getText() Actual_Price.append(original_price) discounted_price = t.find('span', class_ = 'lfloat product-price').getText() Discounted_Price.append(discounted_price) try: product_discount = t.find('div', class_ = 'product-discount') Discount.append(product_discount.text) except Exception as e: product_discount = None Discount.append(product_discount)Step 6. 以所需的格式存儲數(shù)據(jù)
我們已經(jīng)提取了數(shù)據(jù)。我們現(xiàn)在要做的就是將數(shù)據(jù)存儲到文件或數(shù)據(jù)庫中。您可以按照所需的格式存儲數(shù)據(jù)。這取決于你的要求。在這里,我們將以CSV(逗號分隔值)格式存儲提取的數(shù)據(jù)。
= pd.DataFrame({'Product Name':Products,'Actual_Price':Actual_Price,'Discounted_Price':Discounted_Price,'Offer_Percentage':Discount,'Product_url':url}) df.to_csv(' products.csv', index=False, encoding='utf-8')參考:
https://www.agiratech.com/web-scraping-using-python
總結(jié)
以上是生活随笔為你收集整理的python提取网页中p标签中的内容_使用Python进行爬虫的初学者指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PLSQL DBMS_DDL.ANALY
- 下一篇: python做接口自动化测试仪器经销商_