首页 > 解决方案 > 熊猫 df 的简单 bs4 脚本

问题描述

非常简单的 Q,我有这个脚本,我正在处理它来抓取一些网络数据:

for x in df['Product ID']:
search_url = 'url' + x
uclient = uReq(search_url)
page_html = uclient.read()
uclient.close()
page_soup = soup(page_html,"html.parser")
rp = page_soup.findAll("h2",{"class" : 'highlightValue'})[0].text.strip()

将循环的这个结果写回我的数据框的最佳方法是什么?如果我分配一个新列让我们称之为 df['Price'] 它将在循环的每个元素中被覆盖,而我只希望它为 x 分配一个值。

data = ['12345','6789']
pd.DataFrame({'Product ID' : data}) 

因此,如果我的网站上 12345 = 25 英镑的价格和 6789 英镑 50 的价格我想分别分配回来,我是否遗漏了一些简单的东西?

期望的输出

Product ID  Price
12345       £25
6789        £50

标签: pythonpandasbeautifulsoup

解决方案


data = ['12345','6789']
df = pd.DataFrame({'Product ID' : data}) 


for x in df['Product ID']:
    search_url = 'url' + x
    uclient = uReq(search_url)
    page_html = uclient.read()
    uclient.close()
    page_soup = soup(page_html,"html.parser")
    rp = page_soup.findAll("h2",{"class" : 'highlightValue'})[0].text.strip()

    df.loc[df['Product ID'] == x,'Price'] = rp

下面的代码是选择与变量 x 的产品 ID 匹配的行,并将这些行的“价格”列分配给您刚刚抓取的内容

df.loc[df['Product ID'] == x,'Price'] = rp


推荐阅读