Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas:将行附加到已经通过Pandas.DataFrame.apply运行的数据帧_Python_Selenium_Pandas - Fatal编程技术网

Python Pandas:将行附加到已经通过Pandas.DataFrame.apply运行的数据帧

Python Pandas:将行附加到已经通过Pandas.DataFrame.apply运行的数据帧,python,selenium,pandas,Python,Selenium,Pandas,简介: 我正在使用Python2.7的Selenium WebDriver和Pandas来制作一个web刮板,它可以指向一系列URL并刮板该页面上的URL。如果它在那里找到URL,我希望它们被添加到运行序列中。如何使用pandas.DataFrame.apply 代码: 上面的刮板使用电子表格.csv中的列“URL”导航到每个新的URL。 然后,它在页面上刮取与regexwww.+匹配的所有字符串以查找URL,并将结果放入列表刮取的URL 它还获取字符串something\u else=“fo

简介: 我正在使用Python2.7的
Selenium WebDriver
Pandas
来制作一个web刮板,它可以指向一系列URL并刮板该页面上的URL。如果它在那里找到URL,我希望它们被添加到运行序列中。如何使用
pandas.DataFrame.apply


代码:

上面的刮板使用
电子表格.csv中的
列“URL”
导航到每个新的
URL
。 然后,它在页面上刮取与regex
www.+
匹配的所有字符串以查找URL,并将结果放入列表
刮取的URL

它还获取字符串
something\u else=“foobar”

当它处理完
“URL”
中的所有单元格后,它会写入一个新文件
result.csv


我的问题:

我很难找到一种方法将列表中的刮取URL添加到列
“URL”
——这样它们就插入到“活动”URL的正下方(使用
use[“URL”]
检索)

如果源电子表格中的列如下所示:

["URL"]
"www.yahoo.com"
"www.altavista.com"
"www.geocities.com"
在www.yahoo.com上,scraper通过regex找到这些字符串:

"www.angelfire.com"
"www.gamespy.com"
我想将这些作为行添加到
www.yahoo.com
下面的
列“URL”
,以便它们成为刮板搜索的下一个关键字:

["URL"]
"www.yahoo.com"         #This one is done
"www.angelfire.com"     #Go here now 
"www.gamespy.com"       #Then here
"www.altavista.com"     #Then here
"www.geocities.com"     #...

这可能吗?我是否可以在运行中附加数据帧
df
,该数据帧已经通过
apply()
运行了?

我认为没有办法按照您的设想使用
apply
。即使有办法

  • 这很可能需要跟踪已经迭代了多少项 这样您就可以知道在哪里将新项目插入
    df['URL']

  • df['URL']
    中间插入需要将当前数据帧中的所有数据复制到 新的、更大的数据帧。将整个数据帧(可能)复制一次 每行代码都会使代码变得不必要的慢

相反,一种更简单、更好的方法是使用。堆栈可以通过一个简单的列表来实现。您可以将
df['URL']
推到堆栈上,然后从堆栈中弹出一个URL并对其进行处理。当发现新的刮取URL时,可以将其推送到堆栈上,并成为下一个弹出的项目:

import pandas as pd

def crawl(url_stack):
    url_stack = list(url_stack)
    result = []
    while url_stack:
        url = url_stack.pop()
        driver.get(url)
        scraped_urls = ...
        url_stack.extend(scraped_urls)

        something_else = "foobar"
        result.append([url, something_else])
    return pd.DataFrame(result, columns=["URL", "Something else"])

df = pd.read_csv(spreadsheet.csv, delimiter=",")
df = crawl(df['URL'][::-1])
df.to_csv("result.csv", delimiter=",")
import pandas as pd

def crawl(url_stack):
    url_stack = list(url_stack)
    result = []
    while url_stack:
        url = url_stack.pop()
        driver.get(url)
        scraped_urls = ...
        url_stack.extend(scraped_urls)

        something_else = "foobar"
        result.append([url, something_else])
    return pd.DataFrame(result, columns=["URL", "Something else"])

df = pd.read_csv(spreadsheet.csv, delimiter=",")
df = crawl(df['URL'][::-1])
df.to_csv("result.csv", delimiter=",")