【发布时间】:2016-09-26 22:26:55
【问题描述】:
简介:
我正在为 Python 2.7 使用 Selenium WebDriver 和 Pandas 来制作一个网络爬虫,该网络爬虫会转到一系列 URL 并在该页面上爬取 URL。如果它在那里找到 URL,我希望将它们添加到运行序列中。如何使用pandas.DataFrame.apply 做到这一点?
代码:
import pandas as pd
from selenium import webdriver
import re
df = pd.read_csv(spreadsheet.csv, delimiter=",")
def crawl(use):
url = use["URL"]
driver.get(url)
scraped_urls = re.findall(r"(www.+)", element.text)
something_else = "foobar"
#Ideally the scraped_urls list would have to be unpacked here
return pd.Series([scraped_urls, something_else])
df[["URL", "Something else"]] = df["URL"].apply(crawl)
df.to_csv("result.csv", delimiter=",")
上面的爬虫使用spreadsheet.csv 中的"URL" 列导航到每个新的url。
然后它会抓取页面上与正则表达式 www.+ 匹配的所有字符串以查找 URL,并将结果放入列表 scraped_urls。
它还获取字符串something_else = "foobar"。
当它处理完"URL" 中的所有单元格后,它会写入一个新文件result.csv。
我的问题:
我很难找到一种方法来将列表 scraped_urls 中的抓取网址添加 到列 "URL" - 以便将它们插入到下方“活动” URL(使用 use["URL"] 检索)。
如果源电子表格中的列如下所示:
["URL"]
"www.yahoo.com"
"www.altavista.com"
"www.geocities.com"
在 www.yahoo.com 上,爬虫通过正则表达式找到这些字符串:
"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" #...
这可能吗?我可以即时附加已经通过 apply() 运行的 DataFrame df 吗?
【问题讨论】: