![](/img/trans.png)
[英]How to scrape data from multiple urls to be saved as a single, date ordered csv file?
[英]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')
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.