首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从多个urls中刮取数据并将这些数据保存在同一个csv文件中?

如何从多个urls中刮取数据并将这些数据保存在同一个csv文件中?
EN

Stack Overflow用户
提问于 2022-09-05 06:24:32
回答 3查看 253关注 0票数 0

我正在使用beautifulsoup来抓取数据。有多个urls,我必须将我从这些urls中抓取的数据保存在同一个CSV文件中。当我试图从不同的文件中抓取并保存到相同的CSV文件时,我在CSV文件中刮到的最后一个url中的数据就在那里了。下面是我从其中抓取数据的代码。

代码语言:javascript
复制
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')
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-05 06:36:52

在您的例子中的主要问题是,您没有调用第二个页面,所以您不会得到这些结果-迭代所有这些结果,然后创建您的CSV。

第二种方法是将数据附加到现有文件中,由@M计算出来。

注意:尽量避免按类选择元素,因为它们比idid结构更动态。

示例

代码语言:javascript
复制
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')

输出

代码语言:javascript
复制
    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
票数 1
EN

Stack Overflow用户

发布于 2022-09-05 06:36:13

你的问题不太清楚。当您运行这个程序时,我假设csv是用所有的图像URL创建的,您想要重新运行这个脚本并将其他图像URL的get附加到同一个csv中吗?如果是这样的话,那么只需将to_csv函数调用更改为:

代码语言:javascript
复制
books.to_csv("bkm_art.csv", mode='a', index=False, header=False ,encoding = 'utf-8-sig')

添加mode='a'将开始附加到文件中,而不是覆盖它(文档)。

票数 1
EN

Stack Overflow用户

发布于 2022-09-05 06:41:58

代码语言:javascript
复制
import numpy as np
import pandas as pd
pages = np.arange(1, 2, 1)
for page in pages:
    print(page)

试试看,你会发现你只得到了1

也许你可以用

代码语言:javascript
复制
pages = range(1, 2, 1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73605267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档