簡體   English   中英

如何從多個 url 中抓取數據並將這些數據保存在同一個 csv 文件中?

[英]How can I scrape data from multiple urls and save these data in the same csv file?

我正在使用beautifulsoup來抓取數據。 有多個 url,我必須將從這些 url 中抓取的數據保存在同一個 CSV 文件中。 當我嘗試從單獨的文件中抓取並保存到同一個 CSV 文件時,我在 CSV 文件中抓取的最后一個 url 中的數據就在那里。 下面是我從中抓取數據的一段代碼。

images = []
pages = np.arange(1, 2, 1)
for page in pages:
    url = "https://www.bkmkitap.com/sanat"
    results = requests.get(url, headers=headers)
    soup = BeautifulSoup(results.content, "html.parser")
    book_div = soup.find_all("div", class_="col col-12 drop-down hover lightBg")
    sleep(randint(2, 10))
    for bookSection in book_div:
        img_url = bookSection.find("img", class_="lazy stImage").get('data-src')
        images.append(img_url)  
books = pd.DataFrame(
    {
        "Image": images,
} )
books.to_csv("bkm_art.csv", index=False, header=True,encoding = 'utf-8-sig')

你的問題不是很清楚。 當你運行這個時,我假設一個 csv 是用所有的圖像 URL 創建的,你想重新運行這個相同的腳本並將其他圖像 URL 附加到同一個 csv? 如果是這種情況,那么您只需將to_csv function 調用更改為:

books.to_csv("bkm_art.csv", mode='a', index=False, header=False ,encoding = 'utf-8-sig')

添加mode='a'開始附加到文件而不是覆蓋它( doc )。

您的示例中的主要問題是您沒有獲得第二頁,因此您不會獲得這些結果 - 迭代所有這些結果,然后創建您的 CSV。

第二個,如你想將 append 數據到現有文件中,由@MB 計算出來

注意:盡量避免按類選擇元素,因為它們比id或 HTML 結構更動態

例子

import requests, random
from bs4 import BeautifulSoup

data = []

for page in range(1, 3, 1):
    url = f"https://www.bkmkitap.com/sanat?pg={page}"
    results = requests.get(url, headers=headers)
    soup = BeautifulSoup(results.content, "html.parser")
    
    for bookSection in soup.select('[id*="product-detail"]'):
        data.append({
            'image':bookSection.find("img", class_="lazy stImage").get('data-src')
        })
books = pd.DataFrame(data)

books.to_csv("bkm_art.csv", index=False, header=True,encoding = 'utf-8-sig')

Output

    image
0   https://cdn.bkmkitap.com/sanat-dunyamiz-190-ey...
1   https://cdn.bkmkitap.com/sanat-dunyamiz-189-te...
2   https://cdn.bkmkitap.com/tiyatro-gazetesi-sayi...
3   https://cdn.bkmkitap.com/mavi-gok-kultur-sanat...
4   https://cdn.bkmkitap.com/sanat-dunyamiz-iki-ay...
... ...
112 https://cdn.bkmkitap.com/hayal-perdesi-iki-ayl...
113 https://cdn.bkmkitap.com/cins-aylik-kultur-der...
114 https://cdn.bkmkitap.com/masa-dergisi-sayi-48-...
115 https://cdn.bkmkitap.com/istanbul-sanat-dergis...
116 https://cdn.bkmkitap.com/masa-dergisi-sayi-49-...
117 rows × 1 columns
import numpy as np
import pandas as pd
pages = np.arange(1, 2, 1)
for page in pages:
    print(page)

試試看,你會發現你只得到1

也許你可以使用

pages = range(1, 2, 1)

您可以使用 python 的請求模塊來請求和報廢數據,然后使用 pandas 您可以將其轉換為 csv 文件。

https://www.tutorialspoint.com/requests/requests_web_scraping_using_requests.html

可以使用 pandas.to_csv()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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