Python 为什么使用str(df[col])会导致代码只与单个记录相关?
我有一个包含线索(名称)的数据框。 我试图在网上搜索有关这些线索的相关数据 我正在使用beautifulsoup和urllib来刮取数据。 url如下所示:Python 为什么使用str(df[col])会导致代码只与单个记录相关?,python,pandas,web-scraping,beautifulsoup,data-science,Python,Pandas,Web Scraping,Beautifulsoup,Data Science,我有一个包含线索(名称)的数据框。 我试图在网上搜索有关这些线索的相关数据 我正在使用beautifulsoup和urllib来刮取数据。 url如下所示: url = u'https://www.website.com/SearchResults?query=' + quote(str(df['name'])) url = u'https://www.website.com/SearchResults?query=' + quote('this+is+a+leads+name') 问题是,
url = u'https://www.website.com/SearchResults?query=' + quote(str(df['name']))
url = u'https://www.website.com/SearchResults?query=' + quote('this+is+a+leads+name')
问题是,对于每个潜在客户,我都会得到完全相同的数据,这是数据帧中最后一个潜在客户的数据,数据是从中检索到的
每当我使用字符串名而不是str(df['name'])时,我都会为特定的lead获取正确的数据,如下所示:
url = u'https://www.website.com/SearchResults?query=' + quote(str(df['name']))
url = u'https://www.website.com/SearchResults?query=' + quote('this+is+a+leads+name')
我认为这个问题与str(df['name'])特别相关的原因是,每当我删除它时,我都会成功地获取数据,否则,我会从100000个Lead获得相同的数据。唯一的问题是,为了使用数据框中的线索,我需要使用str。str(df)
将返回数据框的文本表示形式。比如说
>>> pd.DataFrame({"col1":[1,2,3,4], "name":["row1","row2","row3","row4"]})
col1 name
0 1 row1
1 2 row2
2 3 row3
3 4 row4
上述数据框的文本表示形式将返回
col1 name
1 row1
2 row2
3 row3
4 row4
因此,要执行行操作,最好使用dataframe中的apply
函数
>>> def search_url(search_lead):
... url = u'https://www.website.com/SearchResults?query=' + search_lead
... print(url) #You can do your operation here
通过使用上述功能,使用apply
>>> df.name.apply(lambda x: search_url(x))
https://www.website.com/SearchResults?query=row1
https://www.website.com/SearchResults?query=row2
https://www.website.com/SearchResults?query=row3
https://www.website.com/SearchResults?query=row4
0 None
1 None
2 None
3 None
Name: name, dtype: object
您可以在函数中执行web抓取。希望这个答案对您有所帮助。谢谢大家
我试过你们的建议。
对我来说,真正起作用的是创建一个从web获取数据的功能,
然后使用for循环为一行中每个潜在客户的名称调用函数
简而言之,我就是这么做的:
功能:
def getdata(name):
url = u'https://www.website.com/search?q=' + quote(str(name))
.
.
.
return (data)
循环:
for i, row in df.iterrows():
leaddata = getdata(df.name[i])
list1.append(leaddata)
然后我继续将列表插入到数据框中。您的
quote
方法做什么?df['name']。astype(str)
?或者df['name']。对行操作应用(lambda x:str(x))
?我不相信我曾经使用过str(df[col]),所以我不确定会发生什么。希望这有帮助。
>>> def search_url(search_lead):
... url = u'https://www.website.com/SearchResults?query=' + search_lead
... print(url) #You can do your operation here