什么是抓住动态网站的最佳方法,其中大部分内容是由似乎是ajax请求生成的?我之前有过使用Mechanize,BeautifulSoup和python组合的经验,但我还有新的东西.
- 编辑 - 更多细节:我正在试图刮掉CNN 主数据库.那里有大量的信息,但似乎没有api.
我需要从Windows应用程序中抓取数据以在另一个程序中运行查询.有谁知道我在.NET中做这个的好起点?
我经常发现自己需要为内部目的进行一些简单的屏幕抓取(即我使用的第三方服务仅通过HTML发布报告).我现在至少有两三个这样的案例.我可以使用apache httpclient并创建所有必要的屏幕抓取代码,但它需要一段时间.这是我通常的过程:
我希望我能够快速"记录我的会话",然后参数化会话之间不同的事情.想象一下,只需使用Charles获取所有请求HTTP,然后参数化相关的查询字符串或post params.我有一个可重复使用的http脚本.
有没有这样做呢?我记得当我曾经在一家大公司工作时,我们曾经使用过Mercury Interactive称为Load Runner的工具,它基本上有一种记录http会话并使其可重用(用于测试目的)的好方法.不幸的是,这个工具非常昂贵.
我想读一下R中URL(eq,http://www.haaretz.com/)的内容.我想知道如何做到这一点
有一个网站我试图从Perl中提取信息,但我需要的页面部分是使用javascript生成的,所以你在源代码中看到的是:
<div id="results"></div>
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式提取该div的内容并使用Perl/proxies/whatever将其保存到文件中.例如,我想保存的信息将是
document.getElementById('results').innerHTML;
Run Code Online (Sandbox Code Playgroud)
我不确定这是否可能,或者是否有人有任何想法或方法来做到这一点.我正在使用lynx源转储到其他页面,但由于我不能直接屏幕刮这个页面我来这里询问它!
如果有人有兴趣,页面是http://downloadcenter.trendmicro.com/index.php?clk=left_nav&clkval=pattern_file®s=NABU,我试图得到的信息是关于ConsumerOPR的行
我已经完成了屏幕抓取我们的一个遗留Web应用程序的任务,从代码中提取某些数据.数据被格式化并且"应该"每次都显示完全相同.我只是不确定如何去做这件事.这是一个包含页眉和页脚导航的完整html文件,但在这一切的中间是我需要的数据.
我需要提取公司名称值,联系人姓名,电话,电子邮件地址等.
以下是代码的示例:
...html above here
<br /><br />
<table cellpadding="0" cellspacing="12" border="0">
<tr>
<td valign="top" align="center">
<!-- Company Info -->
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="black">
<table cellspacing="1" cellpadding="0" border="0" width="370">
<tr>
<th>ABC INDUSTRIES</th>
</tr>
<tr>
<td class="search">
<table cellpadding="5" cellspacing="0" border="0" width="100%">
<tr>
<td>
<table cellpadding="1" cellspacing="0" border="0" width="100%">
<tr>
<td align="center" colspan="2"><hr></td>
</tr>
<tr>
<td align="right" nowrap><b><font color="FF0000">Contact Person <img src="/images/icon_contact.gif" align="absmiddle"> :</font></b></td>
<td align="left" width="100%"> Joe Smith</td>
</tr>
<tr>
<td align="right" nowrap><b><font color="FF0000">Phone Number <img src="/images/icon_phone.gif" align="absmiddle"> :</font></b></td>
<td align="left" …Run Code Online (Sandbox Code Playgroud) 如果你已经对搜索API做了任何认真的研究,你就会知道他们中的大多数都有大量的TOS/TOU限制,这使得他们几乎不可能在除了最愚蠢的应用程序之外的任何东西中使用.
Bing的2.0 API,Yahoo Search BOSS,Google Places,Google AJAX Search(死机)等对我们来说太过限制了.我需要一次运行有限且相对较少的查询(可能是500k),从结果中存储特定数据以便在我们的应用程序中使用.
例如,我们需要将业务名称与其目标网站进行匹配(我们已经编写了算法,以便在必要时从一组结果中进行"最佳猜测";我们只需要一个vanilla结果集).此外,我们需要将地址与该公司的地址相匹配.
不幸的是,我可以找到ZERO搜索API,它允许我们以程序化,非用户启动的方式启动查询.
我们甚至非常渴望给某人一些冷酷的现金来获取这类数据; 谷歌,必应,雅虎和其他人似乎根本不想要我们的钱(由他们的TOS证明)......
有什么想法吗?
我是一名独立开发人员,想要编写一个简单的商业应用程序来显示电影放映时间信息.经过大量的研究,我找不到任何好的"合法"方式来获取这些数据.
我考虑的一个选项是屏幕抓取或抓取xml提要但是通过条款和条件阅读,我不认为这个选项是正确的方法.
另一种选择是通过一家名为Tribune Media Services的公司来解决问题.看起来这家公司为google,yahoo,fandango等网站提供showtime API.但像我这样的个人开发商不可能为小型商业应用程序提供此服务.
然后我决定寻找其他想法,比如构建与财务相关的应用程序,但数据源又成为一个大问题.我不明白为什么像Billboards这样的网站提供API而不是商业用途.
我全都用于支付使用API /数据的费用,但我找不到"亚马逊网络服务"计划,个人或小型企业的人可以为他们使用的东西付费!我认为这会鼓励大量创新,也可以为数据内容所有者提供一些资金.
在娱乐或金融领域是否有这样的API,我可以开发商业应用程序而不进行任何屏幕抓取?
最后,链接到放映时间页面会被视为合法吗?例如,如果用户想要查看特定影院的放映时间,我们是否可以在点击时生成应用中谷歌放映时间页面的链接,将您带到Google Showtimes页面(在浏览器上)?
我目前正在处理一个<ul>包含许多第一级<li>元素的元素.我想得到那些元素,只有那些元素.但是,当我使用Jsoup选择器或getElementsByTag获取它们时,它还会返回<li>这些第一级<li>元素中的元素.
我该怎么做才能获得第一级<li>元素?
这是代码:
Elements bundleList = indieGala.select("section.games_bundle_box2")
.get(0).select("ul.unlock")
.get(0).getElementsByTag("li");
Run Code Online (Sandbox Code Playgroud)
这是html:
<section class="games_bundle_box2">
<div class="games-container">
<!-- List Game Unlocked -->
<ul class="unlock">
<!-- Item -->
<li>
<!-- Preview Thumb -->
<a href="#game1" class="fancybox-various" title="Desura & Steam for Windows and Mac - This game has been GreenLighted on Steam and all buyers of The IndieGala Flashpoint bundle will receive Steam keys in a few weeks!">
<span class="tier1">
Pay minimum
<em class="color-text">
$1 …Run Code Online (Sandbox Code Playgroud) 我正在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
html ×4
api ×2
c# ×2
python ×2
.net ×1
ajax ×1
android ×1
data-mining ×1
dom ×1
iphone ×1
java ×1
javascript ×1
jsoup ×1
perl ×1
r ×1
search ×1
selenium ×1
web-scraping ×1