我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')
uj5u.com熱心網友回復:
你的問題不是很清楚。當您運行此程式時,我假設使用所有影像 url 創建了一個 csv,并且您想要重新運行相同的腳本并將其他影像 URL 附加到相同的 csv 中?如果是這種情況,那么您只需將to_csv函式呼叫更改為:
books.to_csv("bkm_art.csv", mode='a', index=False, header=False ,encoding = 'utf-8-sig')
添加mode='a'開始附加到檔案而不是覆寫它(doc)。
uj5u.com熱心網友回復:
您的示例中的主要問題是您沒有呼叫第二頁,因此您不會得到這些結果 - 迭代所有這些結果,然后創建您的 CSV。
第二個,當您想將資料附加到現有檔案時,由@MB 計算出來
注意: 盡量避免按類選擇元素,因為它們比idHTML 結構更具動態性
例子
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')
輸出
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
uj5u.com熱心網友回復:
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504623.html
