作为我的博士学位的一部分研究,我正在抓取大量的网页,并在刮擦结果中搜索关键字。
到目前为止我是这样做的:
# load data with as pandas data frame with column df.url
df = pd.read_excel('sample.xls', header=0)
# define keyword search function
def contains_keywords(link, keywords):
try:
output = requests.get(link).text
return int(any(x in output for x in keywords))
except:
return "Wrong/Missing URL"
# define the relevant keywords
mykeywords = ('for', 'bar')
# store search results in new column 'results'
df['results'] = df.url.apply(lambda l: contains_keywords(l, mykeywords))
这很好用。我只有一个问题:相关关键字mykeywords
列表经常更改,而网页保持不变。运行代码需要很长时间,因为我request
一遍又一遍。
我有两个问题:
(1)有没有办法存储request.get(link).text
的结果?
(2)如果是这样,如何在保存的文件中搜索产生与当前脚本相同的结果?
一如既往,感谢您的时间和帮助! / R
答案 0 :(得分:0)
您可以下载网址的内容并将其保存在目录中的单独文件中(例如:' links')
def get_link(url):
file_name = os.path.join('/path/to/links', url.replace('/', '_').replace(':', '_'))
try:
r = requests.get(url)
except Exception as e:
print("Failded to get " + url)
else:
with open(file_name, 'w') as f:
f.write(r.text)
然后修改contains_keywords
函数以读取本地文件,因此每次运行脚本时都不必使用requests
。
def contains_keywords(link, keywords):
file_name = os.path.join('/path/to/links', link.replace('/', '_').replace(':', '_'))
try:
with open(file_name) as f:
output = f.read()
return int(any(x in output for x in keywords))
except Exception as e:
print("Can't access file: {}\n{}".format(file_name, e))
return "Wrong/Missing URL"
编辑:我刚在get_link
添加了一个try-except块,并使用file_name
的绝对路径