标签: screen-scraping

在Ruby中解析网页的最佳方法是什么?

我一直在rubyforge上查看XML和HTML库,这是一种从网页中提取数据的简单方法.例如,如果我想在stackoverflow上解析用户页面,我该如何将数据转换为可用的格式?

假设我想解析自己的用户页面以获取我当前的信誉评分和徽章列表.我试图将从我的用户页面检索到的源转换为xml,但由于缺少div,转换失败.我知道我可以做一个字符串比较并找到我正在寻找的文本,但必须有一个更好的方法来做到这一点.

我想将它合并到一个简单的脚本中,该脚本在命令行中吐出我的用户数据,并可能将其扩展为GUI应用程序.

html ruby xml screen-scraping

14
推荐指数
3
解决办法
9435
查看次数

抓取并刮擦iTunes App Store

我注意到iTunes预览允许您通过http://协议抓取和抓取页面.但是,许多链接都试图在iTunes而不是浏览器中打开.例如,当您转到iBooks页面时,它会立即尝试打开带有itms://协议的URL .

是否还有其他方法可以抓取App Store或这是唯一的方法吗?

可以在itms://协议链接本身以某种方式抓取?

language-agnostic screen-scraping itunes web-crawler

14
推荐指数
3
解决办法
2万
查看次数

使用Javascript抓取网站?

我正在努力将信息提交给严重依赖Javascript来完成其大部分操作的网站.当我在浏览器中禁用Javascript时,该网站甚至无法工作.

我在Google和SO上搜索了一些解决方案,并且有人建议我应该对Javascript进行逆向工程,但我不知道该怎么做.

到目前为止,我一直在使用Mechanize,它适用于不需要Javascript的网站.

有没有办法通过使用urllib2或类似的东西访问使用Javascript的网站?我也愿意学习Javascript,如果这就是它需要的东西.

javascript python screen-scraping

14
推荐指数
6
解决办法
2万
查看次数

Python Scrapy,如何为项目定义管道?

我正在使用scrapy来抓取不同的网站,为每个网站我都有一个项目(提取不同的信息)

好吧,例如我有一个通用管道(大多数信息是相同的)但现在我正在抓取一些谷歌搜索响应和管道必须是不同的.

例如:

GenericItem 使用 GenericPipeline

但是GoogleItem用途GoogleItemPipeline,但是当蜘蛛爬行时它试图使用GenericPipeline而不是GoogleItemPipeline....我如何指定谷歌蜘蛛必须使用哪个管道?

python screen-scraping scrapy

13
推荐指数
1
解决办法
4998
查看次数

使用JavaScript编程的Python浏览器

我想筛选一个使用JavaScript的网站.

机械化,Python的程序化Web浏览器.但是,它(可以理解)并不解释javascript.有没有Python的程序化浏览器呢?如果没有,我可以使用Python中的任何JavaScript实现来尝试创建一个吗?

javascript python browser screen-scraping mechanize

13
推荐指数
3
解决办法
2万
查看次数

使用Python和Mechanize提交表单数据并进行身份验证

我想提交登录Reddit.com网站,导航到页面的特定区域,并提交评论.我没有看到这段代码出了什么问题,但它没有起作用,Reddit网站上没有反映出任何变化.

import mechanize
import cookielib


def main():

#Browser
br = mechanize.Browser()


# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

#Opens the site to be navigated
r= br.open('http://www.reddit.com')
html = r.read()

# Select the second (index one) form
br.select_form(nr=1)

# User credentials
br.form['user'] = 'DUMMYUSERNAME'
br.form['passwd'] = 'DUMMYPASSWORD'

# Login
br.submit()

#Open up comment page
r= br.open('http://www.reddit.com/r/PoopSandwiches/comments/f47f8/testing/')
html = r.read()

#Text …
Run Code Online (Sandbox Code Playgroud)

python networking screen-scraping mechanize

13
推荐指数
1
解决办法
2万
查看次数

使用javascript链接下载PhantomJS

我试图刮掉以下网站:

http://www.fangraphs.com/leaders.aspx?pos=all&stats=bat&lg=all&qual=0&type=8&season=2011&month=0&season1=2011&ind=0&team=0&rost=0&players=0

如果单击标题为"导出数据"的表右上角的小按钮,则会运行javascript脚本,我的浏览器会以.csv格式下载该文件.我希望能够编写一个可以自动执行此操作的PhantomJS脚本.有任何想法吗?

上面的按钮被编码为HTML,如下所示:

<a id="LB_cmdCSV" href="javascript:__doPostBack('LB$cmdCSV','')">Export Data</a></div>
Run Code Online (Sandbox Code Playgroud)

我还在HTML源代码中找到了这个函数:

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)

我是PhantomJS/Javascript的新手,可以在这里使用一些指针.我想我已经找到了我需要自动完成的所有信息(如果我错了,请纠正我),但不知道从哪里开始编码.谢谢你的帮助.

编辑 - 这就是我的脚本现在的样子:

var page = new WebPage();
url = 'http://www.fangraphs.com/leaders.aspx?pos=all&stats=bat&lg=all&qual=0&type=8&season=2011&month=0&season1=2011&ind=0&team=0&rost=0& players=0';

page.open(encodeURI(url), function (status){
  if (status !== "success") {
    console.log("Unable to access website");
  } else {
      page.evaluate(function() {
        __doPostBack('LB$cmdCSV', '');
      });
    }
  phantom.exit(0); …
Run Code Online (Sandbox Code Playgroud)

javascript screen-scraping phantomjs

13
推荐指数
1
解决办法
4957
查看次数

如何将HTML页面转换为node.js中的纯文本?

我知道之前已经问过这个问题,但我找不到node.js的好答案

我需要服务器端从提取的HTML页面中提取纯文本(没有标签,脚本等).

我知道如何在客户端使用jQuery(获取body标签的.text()内容),但不知道如何在服务器端执行此操作.

我试过https://npmjs.org/package/html-to-text但这不处理脚本.

  var htmlToText = require('html-to-text');
    var request = require('request');
    request.get(url, function (error, result) {
        var text = htmlToText.fromString(result.body, {
            wordwrap: 130
        });
    });
Run Code Online (Sandbox Code Playgroud)

我试过phantom.js但是找不到一种方法来获取纯文本.

javascript screen-scraping node.js

13
推荐指数
3
解决办法
1万
查看次数

12
推荐指数
1
解决办法
3万
查看次数

在Python中刮擦 - 防止IP禁令

我正在Python用来刮页.到现在为止,我没有任何复杂的问题.

我正在尝试抓取的网站使用了大量的安全检查,并有一些机制来防止抓取.

使用Requestslxml我在被IP禁止之前能够刮掉大约100-150页.有时我甚至会在第一次请求时被禁止(新的IP,之前没有使用,不同的C块).我试过使用欺骗标题,在请求之间随机化时间,仍然是相同的.

我尝试过Selenium,我得到了更好的结果.有了Selenium,在被禁止之前,我能够刮掉大约600-650页.在这里,我也尝试随机化请求(3-5秒之间,并time.sleep(300)在每300个请求上调用).尽管如此,我被禁止了.

从这里我可以得出结论,如果网站在一个打开的浏览器会话中请求超过X个页面或类似的东西,那么它们会禁止IP.

根据您的经验,我还应该尝试什么? 将在Selenium中关闭和打开浏览器帮助(例如在每100个请求关闭并打开浏览器之后).我正在考虑尝试使用代理,但是有大约数百万个页面,而且它将非常广泛.

python selenium screen-scraping web-scraping

12
推荐指数
3
解决办法
2万
查看次数