【发布时间】:2022-01-13 00:48:33
【问题描述】:
首先抱歉,如果这是重复的,我是初学者,所以我不太了解别人问题的全部含义。
我正在尝试为一个学校项目编写一个脚本,该脚本通过一个带有多个链接的大 Excel 文件运行,并从网页上抓取价格,将其与 Excel 中实际价格列中的价格进行比较。如果发现没有区别:太好了!但如果是这样,它应该使用刚刚抓取的新价格来编辑价格。
例如
Excel file :
| Link | Price |
| -------- | -------------- |
| Product1 | 119 |
| Product2 | 89 |
Scraped data :
| Price |
| -------------- |
| 119 |
| 91 |
If this scenario happens, the Excel file should be edited to become like this :
| Link | Price |
| -------- | -------------- |
| Product1 | 119 |
| Product2 | 91 |
目前我只能将价格抓取到列表中并将 Excel 文件转换为 Dataframe,但我真的不知道下一步该做什么......
这是我的代码
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
b =[]
tableau = pd.read_excel (r'PriceTrackerTrails\liens.xlsx')
links = pd.DataFrame(tableau, columns=['prix','liens'])
for i in links.index:
html = requests.get(links['liens'][i]).text
soup = bs(html, 'lxml')
a = soup.find('span', {"itemprop":"price"}).text
b.append(a)
print(links['prix'])
print(b)
输出:
0 139,00
1 98
Name: prix, dtype: object
['139,00', '112,00']
提前谢谢你!
【问题讨论】:
-
在您的 for 循环中,您可以使用来自以下位置的值更新
links['prix']中的值:links.loc[i, 'prix'] = a -
非常感谢@frederick-douglas-pearce 完美运行。我还设法让它在同一个 xlsx 文件中写入更改。但我无法弄清楚如何创建一个仅包含已编辑行的新数据框(或列表列表),这意味着那些价格因 links.loc[i, 'prix'] = a 而改变的行。我需要它来创建一个小表并通过电子邮件发送以通知更改,我知道如何做 SMTP 电子邮件部分,我只是不知道如何创建一个只有行数据的表编辑了他们的价格。再次非常感谢弗雷德里克!
标签: python excel pandas dataframe beautifulsoup