我一直在rubyforge上查看XML和HTML库,这是一种从网页中提取数据的简单方法.例如,如果我想在stackoverflow上解析用户页面,我该如何将数据转换为可用的格式?
假设我想解析自己的用户页面以获取我当前的信誉评分和徽章列表.我试图将从我的用户页面检索到的源转换为xml,但由于缺少div,转换失败.我知道我可以做一个字符串比较并找到我正在寻找的文本,但必须有一个更好的方法来做到这一点.
我想将它合并到一个简单的脚本中,该脚本在命令行中吐出我的用户数据,并可能将其扩展为GUI应用程序.
我正在努力将信息提交给严重依赖Javascript来完成其大部分操作的网站.当我在浏览器中禁用Javascript时,该网站甚至无法工作.
我在Google和SO上搜索了一些解决方案,并且有人建议我应该对Javascript进行逆向工程,但我不知道该怎么做.
到目前为止,我一直在使用Mechanize,它适用于不需要Javascript的网站.
有没有办法通过使用urllib2或类似的东西访问使用Javascript的网站?我也愿意学习Javascript,如果这就是它需要的东西.
我正在使用scrapy来抓取不同的网站,为每个网站我都有一个项目(提取不同的信息)
好吧,例如我有一个通用管道(大多数信息是相同的)但现在我正在抓取一些谷歌搜索响应和管道必须是不同的.
例如:
GenericItem 使用 GenericPipeline
但是GoogleItem用途GoogleItemPipeline,但是当蜘蛛爬行时它试图使用GenericPipeline而不是GoogleItemPipeline....我如何指定谷歌蜘蛛必须使用哪个管道?
我想筛选一个使用JavaScript的网站.
有机械化,Python的程序化Web浏览器.但是,它(可以理解)并不解释javascript.有没有Python的程序化浏览器呢?如果没有,我可以使用Python中的任何JavaScript实现来尝试创建一个吗?
我想提交登录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) 我试图刮掉以下网站:
如果单击标题为"导出数据"的表右上角的小按钮,则会运行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) 我知道之前已经问过这个问题,但我找不到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但是找不到一种方法来获取纯文本.
我想读一下R中URL(eq,http://www.haaretz.com/)的内容.我想知道如何做到这一点
我正在Python用来刮页.到现在为止,我没有任何复杂的问题.
我正在尝试抓取的网站使用了大量的安全检查,并有一些机制来防止抓取.
使用Requests和lxml我在被IP禁止之前能够刮掉大约100-150页.有时我甚至会在第一次请求时被禁止(新的IP,之前没有使用,不同的C块).我试过使用欺骗标题,在请求之间随机化时间,仍然是相同的.
我尝试过Selenium,我得到了更好的结果.有了Selenium,在被禁止之前,我能够刮掉大约600-650页.在这里,我也尝试随机化请求(3-5秒之间,并time.sleep(300)在每300个请求上调用).尽管如此,我被禁止了.
从这里我可以得出结论,如果网站在一个打开的浏览器会话中请求超过X个页面或类似的东西,那么它们会禁止IP.
根据您的经验,我还应该尝试什么? 将在Selenium中关闭和打开浏览器帮助(例如在每100个请求关闭并打开浏览器之后).我正在考虑尝试使用代理,但是有大约数百万个页面,而且它将非常广泛.
screen-scraping ×10
python ×5
javascript ×4
html ×2
mechanize ×2
browser ×1
itunes ×1
networking ×1
node.js ×1
phantomjs ×1
r ×1
ruby ×1
scrapy ×1
selenium ×1
web-crawler ×1
web-scraping ×1
xml ×1