【问题标题】:Store scrape results and search in results with Python and Pandas?使用 Python 和 Pandas 存储抓取结果并在结果中搜索?
【发布时间】:2017-07-26 09:15:09
【问题描述】:

作为我博士学位的一部分。研究,我正在抓取大量网页并在抓取结果中搜索关键字。

到目前为止,我是这样做的:

# 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

【问题讨论】:

  • 只需将它们保存在 urls 目录中的文件中,然后将此行:output = requests.get(link).text 替换为:output = open('urls/'+link).read()
  • 这会产生几个我以后可以索引的文件吗?我不需要为每个请求的 url 指定一个文件名吗?
  • a) 下载每个链接的内容并将其保存在本地磁盘上 - 使用合适的名称,例如:“some.site.com_some_path.html” b) 在@987654328 中传递文件名@ 并读取文件。
  • 谢谢,这是我的主意。但是我在 pandas 数据框中有大约 1800 个 URL,我没有设法自动执行此操作。

标签: python-3.x pandas web-scraping python-requests


【解决方案1】:

您可以下载 url 的内容并将它们保存在目录中的单独文件中(例如:'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 使用了绝对路径

【讨论】:

  • 超级好!谢谢!
猜你喜欢
  • 2021-11-03
  • 1970-01-01
  • 2011-12-06
  • 2023-01-17
  • 2020-04-03
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
相关资源
最近更新 更多