抓取网页时避免重复单词_python

时间:2021-01-13 10:55:20

标签: python web-scraping

我从列表中抓取一个网页(我的 df 的一列转换为包含重复单词的列表)并将结果返回到 df。我需要在抓取时找到一种排除重复项的方法(以减少时间)但是,在出现重复的同时,我需要为所有重复的单词填写导出值。 示例:

my_column         `result`
string1            Yes
string2            No
string3            Yes
string2            No
string1            Yes
string4            No

这是通过使用 my_column 中的关键字,一一获得,没有避免重复。 是否有一种逻辑可以使用,以便在重复的情况下只使用第一个值来抓取但在结果列中填充每个关键字的结果?

这是我的代码

 for keyword in final_list:
                for index, row in data_splitted2.iterrows():
                    if keyword == row['my_column']:  
                        if keyword == None:
                            break
                        # print(keyword)

                        link = website + 'search/q?name=' + keyword
                        driver.get(link)
                        time.sleep(5)

                        try:
                            status = driver.find_element_by_class_name("yyyyy")
                            row['result'] = status.text


                        except NoSuchElementException:
                            pass

最后一次提到,在我的最终 df 中,我需要保留重复的关键字,以便在抓取时将它们传递但出现在我的最终 df 中。

非常感谢

`

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,您可能正在寻找类似下面的内容。它非常简化,只是为了响应特定问题:

假设你有这个数据框:

data = ['string1', 'string2', 'string3', 'string2', 'string1', 'string4']
result = ['','','','','','']

df = pd.DataFrame(columns=["my_column",'result'])
df['my_column'],df['result'] = data,result

我们可以在执行操作时跳过重复项,但将这些操作的结果分配给所有行,包括重复项:

for val in df.my_column.unique():
    state = "Yes" if random.randint(1,2)==1 else "No"
    #in your actual code, the above line will probably have to be replaced with status.text
    df.loc[df['my_column'] == val, 'result'] = state
df

随机输出:

my_column   result

0   string1     No
1   string2     Yes
2   string3     Yes
3   string2     Yes
4   string1     No
5   string4     No