【问题标题】:Downloading a web page and searching a text with python下载网页并使用 python 搜索文本
【发布时间】:2015-01-26 14:58:32
【问题描述】:

我正在尝试从网站上抓取特定文本。因为我是 Python 新手,我发现使用单个脚本很难抓取文本,所以我先使用了这段代码:

import urllib
import requests
from bs4 import BeautifulSoup
htmltext = urllib.urlopen("https://io.winmasters.com/Feeds/api/event /282576?lang=el").read()

data = htmltext
soup =  BeautifulSoup(data)
f = open('/Desktop/text.txt', 'w')
f.write(data)
f.close()`

接下来我正在尝试编写一个脚本来搜索文本并打印特定的单词。

with open("/Desktop/text.txt") as openfile:
    for line in openfile:
        for part in line.split():
            if "odds=" in part:
                print part

但是搜索脚本没有返回我正在搜索的文本。请问有什么建议吗?

【问题讨论】:

  • 脚本返回什么以及您在搜索什么?
  • 好地方。此外,该 URL 似乎返回 JSON,这非常方便,并且可以使用 Python json 库使用 loads 轻松解析。 odds 是 JSON 中的键之一,因此很容易找到所有值。
  • 你有什么理由在那里有import requests,然后还是使用urllib.urlopen - 似乎浪费了让事情变得简单的机会。

标签: python search text web


【解决方案1】:

如果您只是想要与 odds 键关联的值,完全没有任何上下文,您可以简单地执行以下操作:

import urllib
from json import loads # JSON parser

jsontext = urllib.urlopen("https://io.winmasters.com/Feeds/api/event/282576?lang=el").read()
data = loads(jsontext) # Parse the JSON

odds = [[b['odds'] for b in a['children']] for a in data['children']]

嵌套列表推导利用了数据的结构。使用数据结构的一个优点是您可以在不费力气的情况下进行非常丰富的分析。如果您想要除赔率之外的其他信息,那么这可能会更好地实现为嵌套的for-loop。

【讨论】:

  • 感谢人的帮助。我只是将“从 json 导入负载”替换为“导入 simplejson,因为我收到了一些错误。在最后一行我如何插入另一个过滤器?例如来自儿童、姓名、几率
  • 如果代码解决了您的问题,请考虑接受我的回答。 :-)
  • 如果您想要一些额外的信息,如果它与odds 数据处于同一级别(如 maxStake、name、bookmakerId'),那么只需将这些键添加到列表理解中:odds = [[[b['name'], b['maxStake'], b['odds']] for b in a['children']] for a in data['children']]。真正值得花时间去理解 JSON 数据结构,因为一旦你解析了它,所有的数据都可以访问。
【解决方案2】:

怎么样:

import sys
from bs4 import Beautiful Soup
import mechanize

def viewPage(url):
    browser=mechanize.Browser()
    browser.set_handle_robots(False)
    browser.addheaders=[('user-agent','MozillaMozilla/5.0')]
    page=browser.open(url)
    source_code=page.read()
    soup=BeautifulSoup(source_code)
    info=soup.findAll("insert what you want to locate")
    print(info)
viewPage("www.xkcd.com")

我有一个程序,当您选择一个网页时,它会读取所有链接,随机选择一个并转到它,做同样的事情。它基本上在互联网上爬行。上面的代码是修改后的摘录。

【讨论】: