【问题标题】:Python : Scrape Game NamesPython:抓取游戏名称
【发布时间】:2016-10-20 09:57:54
【问题描述】:

我无法从网页上抓取游戏名称.. 它返回一个空白数组..一旦名称被刮掉,我希望它被写入一个新创建的文本文件..我的代码应该在下面..它远未完成,但我确定我需要一个 While 条件..

def ScrapeK10():
siteToScrape = 'http://www.kiz10.com/new-games'
print '\n[!] Requesting Kiz10..'
kizReq = requests.get(siteToScrape)
print '\n[!] Scraping Newest Games...'
kizTree - html.fromstring(kizReq.content)
kizElement = kizTree.xpath('//strong[@class="bx-caption"]/text()')
print 'Latest Games : ', kizElement, '\n'
return

我遇到的问题是我得到一个空白数组,所以我不确定我是否真的正确地抓取了网站,甚至使用了正确的 xpath?

对此还有点新意..不想使用 Beautiful Soup 也不想使用 Scapy..

但我的目标是抓取我提供的网页中的所有游戏名称,并将它们写入一个新文件..

【问题讨论】:

  • 请包含您正在使用的任何模块。

标签: python web python-requests screen-scraping analysis


【解决方案1】:

你可以使用正则表达式吗? 请注意,所有游戏名称都包含在名为“itemsGame”的 JavaScript 对象中。

使用正则表达式将其过滤掉,然后再次使用正则表达式拆分每一行。

应该这样做

def main():
    import re
    import requests
    url = "http://kiz10.com/index.php?page=newgames"
    raw = requests.get(url).content
    match = re.search("var itemsGame = \[(.*?)\];$", raw, re.M)
    for line in re.findall('\[(.*?)\]', match.group(1)):
        print(line.replace("'", "").split(",")[3].strip())

或者,您可以在 var itemsGame = 的字符串上调用 eval() 到下一个 \n 字符。

不过,很明显,eval 总是很危险,而且从来没有真正推荐过

【讨论】:

  • 我相信它在 Html 中不是吗? <li class="it-glist" id="g-6430" data-idn="6430" onmouseover="_mhovcaption(6430,0)" onmouseleave="_mhovcaption(6430,1)"> <span class="mask-t"> <img src="http://cdn.kiz10.com/upload/thumbnails/thumbs/1475697830_five-fights-at-freddys.jpg"> <div class="fademask" style="display: block; left: 0px; top: 100%;"></div> </span> <a href="http://kiz10.com/five-fights-at-freddys" class="item-mask"><strong class="bx-caption">Five Fights At Freddys</strong></a> <span class="etiqueta toll-reward" style="right:-1px;"></span></li>
  • 啊,等等,我猜两者都有。我对 Python 还是很陌生,在我读到一些关于它的东西之前,我不确定 Regex 到底做了什么,但看到这是不好的做法,我会试试这个out ,你能解释一下你的代码吗?我喜欢知道我在做什么,而不是仅仅复制别人的代码,这样我学到的东西不多
  • 它成功了.. 谢谢.. 但我仍然希望得到解释因为我还有一些网站我也想做这个,我想了解更多
  • 因此,基本上,您需要的确切数据包含在 itemsGame javascript 数组中。我的方法使用正则表达式从等号之后的空格字符到行尾解析它的字符串表示。然后再次使用正则表达式来捕获每个子数组(itemsGame 是一个数组数组)。然后我们用pythons split方法把它拆分成一个字符串列表,第4个元素(索引3)就是游戏的名字
  • 有点道理,哈哈。我需要了解更多关于拆分和剥离方法的信息
猜你喜欢
  • 1970-01-01
  • 2021-08-23
  • 2015-02-24
  • 2021-02-28
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
相关资源
最近更新 更多