簡體   English   中英

如何遍歷 BeautifulSoup Web Scraping 的 URL 列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM