![](/img/trans.png)
[英]Looping through a list of urls for web scraping with BeautifulSoup
[英]How to iterate through a list of URLs for BeautifulSoup Web Scraping?
我的問題很簡單:我正在嘗試遍歷 URL 列表並使用 Requests 和 BeautifulSoup 抓取每個 URL 的內容。 但是,看起來 for 循環似乎沒有正確地將新 URL 分配給 requests 方法並返回第一個 URL 的內容,而不管循環當前處於哪個迭代。 如果你運行這個,你會看到“print(url)”返回正確的 URL,但“taglist”的內容總是來自 URL #1 的結果。 我會將我的代碼粘貼在下面,以防你們中的任何人發現錯誤。 謝謝!
import requests
import os
import bs4
import pandas as pd
import numpy as np
urllist = ['https://www.stoneagetools.com/waterblast-tools-automated-equipment#exchanger','https://www.stoneagetools.com/waterblast-tools-automated-equipment#pipe','https://www.stoneagetools.com/waterblast-tools-automated-equipment#surface','https://www.stoneagetools.com/waterblast-tools-automated-equipment#tank','https://www.stoneagetools.com/waterblast-tools-automated-equipment#boiler','https://www.stoneagetools.com/waterblast-tools-automated-equipment#tools','https://www.stoneagetools.com/waterblast-tools-automated-equipment#swivels','https://www.stoneagetools.com/waterblast-tools-automated-equipment#accessories']
def Get_Names(urllist):
endlist = []
for url in urllist:
templist = []
print(url)
response = requests.get(url)
html = response.content
soup = bs4.BeautifulSoup(html, 'lxml')
taglist = soup.find_all('h3')
del taglist[0]
for tag in taglist:
tag_str = str(tag)
clean1 = tag_str.replace('<h3>','')
clean2 = clean1.replace('</h3>','')
templist.append(clean2)
endlist.append(templist)
return endlist
對於您想要做的事情,您的代碼沒有錯誤。 您每次抓取的網頁都是相同的。 您所做的是轉到該頁面上的不同部分,這就是每個鏈接中的#
所做的。
所有產品都已經在頁面初始頁面上。 要將所有產品及其部分作為 pandas DataFrame,您可以使用下一個示例:
import requests
import pandas as pd
from bs4 import BeautifulSoup
url = "https://www.stoneagetools.com/waterblast-tools-automated-equipment"
soup = BeautifulSoup(requests.get(url).content, "html.parser")
all_data = []
for div in soup.select("section.directory > div"):
section = div.find_previous("h2").get_text(strip=True)
name1 = div.h3.get_text(strip=True)
name2 = div.h5.get_text(strip=True)
all_data.append([section, name1, name2])
df = pd.DataFrame(all_data, columns=["Section", "Name1", "Name2"])
print(df.head(15).to_markdown(index=False))
印刷:
部分 | 名稱1 | 名稱2 |
---|---|---|
交換器清潔 | AutoPack 3L 哨兵 | 智能自動化設備套件 |
交換器清潔 | 自動包裝 3L | 自動化設備套件 |
交換器清潔 | 自動包裝 2L | 自動化設備套件 |
交換器清潔 | AutoPack 指南針 | 自動化設備套件 |
交換器清潔 | 自動包裝專業版 | 自動化設備套件 |
交換器清潔 | 自動箱 2L | 雙彈性采血系統 |
交換器清潔 | 自動箱 3L | 三重柔性采血系統 |
交換器清潔 | ProDrive | AutoBox ABX-PRO 軟管喂料拖拉機 |
交換器清潔 | 捆綁沖擊波 | 殼程換熱器清洗 |
交換器清潔 | 羅盤 | ABX-PRO 徑向分度器 |
交換器清潔 | 密閉空間套件 | 羅盤徑向分度器 |
交換器清潔 | 鰭扇配件 | 對於 AutoBox 系統 |
交換器清潔 | 軟管管理系統 | 用於 AutoBox 軟管拖拉機 |
交換器清潔 | 輕型定位器 | 對於 AutoBox 系統 |
交換器清潔 | 剛性噴槍機 | 用於交換管 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.