我是Python编程的初学者,我正在练习从网站抓取不同的值。我已经从特定网站提取了项目,现在想将它们写到.xls文件中。
该网页大约有715条记录,其中有重复记录。我使用了名为unique()的熊猫模块来删除重复的元素。这需要很长时间,并且该过程一直在进行,并且没有结束。我不知道是否要删除重复的记录。请说出我在哪里做错了,如果可能的话,建议要怎么做。
DECLARE @cantRemuneraciones INT;
DECLARE @cant INT = 0;
DECLARE @ruta NVARCHAR(MAX);
DECLARE @Parametros NVARCHAR(MAX);
SET @cantRemuneraciones = JSON_VALUE(@cTrama,'$.cantRemuneraciones');
WHILE @cant < @cantRemuneraciones
BEGIN
SET @ruta = 'SELECT JSON_VALUE(@cTrama,REPLACE(''$.listaRemuneraciones[0].nPerConRemElemento'',''0'','+ CONVERT(VARCHAR(2),@cant) +'));';
SET @Parametros = N'@cTrama NVARCHAR(MAX)';
EXEC sp_executesql @ruta, @Parametros, @cTrama
SET @cant = @cant +1;
END;
答案 0 :(得分:1)
无需循环。所以代替:
private RelayCommand _ligneAddCommand;
public RelayCommand LigneAddCommand => _ligneAddCommand = _ligneAddCommand ?? new RelayCommand(LigneAddKeyDownEventHandle, LignaAddCanBeExecuted);
protected virtual bool LignaAddCanBeExecuted() => true;
protected virtual void LigneAddKeyDownEventHandle()
{
if (timer != null)
timer.Stop();
timer = new System.Windows.Threading.DispatcherTimer();
timer.Tick += (s, args) =>
{
var t = s.ToString();
timer.Stop();
};
timer.Interval = TimeSpan.FromMilliseconds(50);
timer.Start();
}
我只拿您的字典列表( for i in records:
nl=pd.unique(name).tolist()
pl=pd.unique(position).tolist()
el=pd.unique(email).tolist()
phl=pd.unique(phone).tolist()
records.append({'Names': nl, 'Position': pl, 'Email': el, 'Phone': phl})
df = pd.DataFrame(records,columns=['Names','Position','Phone','Email'])
),转换为数据框
records
然后删除重复的行:
df = pd.DataFrame(records)
我还向您的数据中添加了df = df.drop_duplicates()
,以删除电话号码和其他内容所占用的空白
.strip()
答案 1 :(得分:0)
您的代码需要花费很长时间,因为在第二个循环中,它会在对其进行迭代时追加到记录中,从而使该循环随每次迭代而扩展。要修复代码,您需要在第二个循环中更改变量名称。
因此,不要像这样在第二个循环中使用“ records”变量:
records.append({'Names': nl, 'Position': pl, 'Email': el, 'Phone': phl})
将其名称更改为“ unique_records”:
unique_records.append({'Names': nl, 'Position': pl, 'Email': el, 'Phone': phl})
这是完全更新的代码:
from bs4 import BeautifulSoup as bs
import pandas as pd
import requests
res = requests.get('https://www.raywhite.com/contact/?type=People&target=people&suburb=Sydney%2C+NSW+2000&radius=50%27%27&firstname=&lastname=&_so=contact', headers = {'User-agent': 'Super Bot 9000'})
soup = bs(res.content, 'lxml')
data = soup.find_all("div",{"class":"card horizontal-split vcard"})
records = []
unique_records = []
for item in data:
name = item.find('li', class_='agent-name').text
position = item.find('li',class_='agent-role').text
phone = item.find('li', class_='agent-officenum').text
#link = item.find('li', class_='agent-name')['href']
try:
email = item.find('a', class_='val withicon')['href']
except:
email = 'No Email address'
records.append({'Names':name,'Position':position,'Email':email,'Phone':phone})
for i in records:
nl=pd.unique(name).tolist()
pl=pd.unique(position).tolist()
el=pd.unique(email).tolist()
phl=pd.unique(phone).tolist()
unique_records.append({'Names': nl, 'Position': pl, 'Email': el, 'Phone': phl})
df = pd.DataFrame(unique_records,columns=['Names','Position','Phone','Email'])
df.to_excel(r'C:\Users\laptop\Desktop\RayWhite.xls', sheet_name='MyData2', index = False, header=True)