标签: scraper

建议使用honeypot img标签来检测刮刀/坏机器人

我们想在我们的html体中设置一个小蜜罐图像来检测刮刀/坏机器人.

有没有人之前设置过这样的东西?

我们认为最好的方法是:

a)通过以下方式评论html:

<!-- <img src="http://www.domain.com/honeypot.gif"/> -->
Run Code Online (Sandbox Code Playgroud)

b)将css样式应用于图像,使其通过以下方式隐藏在浏览器中:

.... id="honeypot" ....

#honeypot{
    display:none;
    visibility:hidden;
}
Run Code Online (Sandbox Code Playgroud)

使用上面的任何人都可以预见任何适当和真实的使用者会拉动图像/尝试渲染它的情况吗?

honeypot.gif将是一个mod_rewritten php脚本,我们将在其中进行日志记录.

虽然我知道任何编码良好的刮刀都可以跳过上述2个条件,但至少会对非常脏的刮刀有所了解.

关于最佳方式的任何其他指示?

html image detect scraper honeypot

5
推荐指数
1
解决办法
793
查看次数

PhantomJS和pjscrape - 在多个URL上失败

概观

我正在尝试用PhantomJS和pjscrape框架创建一个非常基本的刮刀.

我的守则

pjs.config({
timeoutInterval: 6000,
timeoutLimit: 10000,
format: 'csv',
csvFields: ['productTitle','price'],
writer: 'file',
outFile: 'D:\\prod_details.csv'
});

pjs.addSuite({
title: 'ChainReactionCycles Scraper',
url: productURLs, //This is an array of URLs, two example are defined below
scrapers: [
    function() {
        var results [];
        var linkTitle = _pjs.getText('#ModelsDisplayStyle4_LblTitle');
        var linkPrice = _pjs.getText('#ModelsDisplayStyle4_LblMinPrice');
        results.push([linkTitle[0],linkPrice[0]]); 
        return results;
    }
]
});
Run Code Online (Sandbox Code Playgroud)

URL数组已使用

第一个数组在第3个或第4个URL之后无法正常工作并失败.

var productURLs = ["8649","17374","7327","7325","14892","8650","8651","14893","18090","51318"];
for(var i=0;i<productURLs.length;++i){
  productURLs[i] = 'http://www.chainreactioncycles.com/Models.aspx?ModelID=' + productURLs[i];
}
Run Code Online (Sandbox Code Playgroud)

这第二个阵列WORKS并没有失败,即使是来自同一站点.

var categoriesURLs = ["304","2420","965","518","514","1667","521","1302","1138","510"];
for(var i=0;i<categoriesURLs.length;++i){ …
Run Code Online (Sandbox Code Playgroud)

javascript webkit scraper web-scraping phantomjs

5
推荐指数
1
解决办法
1828
查看次数

XPath和nokogiri; 教程/例子吗?

我是XPath的新手,对我来说似乎有点棘手; 有时候我发现它的工作方式不符合我的想法.

当我使用XPath和Nokogiri从网站上搜索数据时,如果网站结构复杂,我觉得很难.我使用FirePath来获取元素的XPath,但有时它似乎不起作用.我必须删除浏览器添加的额外标签,例如tbody.

我真的想知道是否有一些很好的教程和XPath和Nokogiri的例子.谷歌搜索后我找不到多少.

xpath nokogiri scraper

5
推荐指数
2
解决办法
9425
查看次数

如何从需要cookie登录的网站上抓取PHP中的网站内容?

我的问题是它不仅需要一个基本的cookie,而是要求一个会话cookie,以及随机生成的ID.我想这意味着我需要使用带有cookie jar的Web浏览器模拟器?

我曾尝试使用Snoopy,Goutte和其他几个Web浏览器模拟器,但到目前为止我还没有找到有关如何接收cookie的教程.我有点绝望了!

谁能给我一个如何在史努比或Goutte中接受cookie的例子?

提前致谢!

php cookies snoopy scraper goutte

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

XPath递归子选择

我正在使用scrapy从网站中提取数据,但我有一个XPath选择器的问题,假设我有这个HTML代码:

<div id="_parent">
    Hi!
    <p>I am a child!</p>
    <span class="someclass">I am a <b>span</b> child!</span>
</div>
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

I am a child
I am a  child!
Run Code Online (Sandbox Code Playgroud)

我应该得到什么:

Hi!
I am a child!
I am a span child!
Run Code Online (Sandbox Code Playgroud)

我正在使用的XPath如下:.// div [@id ="_ parent"] //*/text()我知道这是因为它不是#_parent div的直接子节点但是我怎么能递归地获取所有这些孩子?

html xpath scrapy scraper

5
推荐指数
1
解决办法
8317
查看次数

Facebook刮刀使用不正确的DNS数据>我的网站没有被抓取

我最近将我的一个网站(gezondbenjij.nl)移动到了一个新的托管帐户.这导致了一个新的IP地址.

不幸的是,自从此举以来,Facebook刮刀无法在新的IP地址上找到我的网站.它仍然使用旧的IP.所有DNS设置都是正确的,每个浏览器/客户端/工具都在178.22.57.204(gezondbenjij.nl)找到正确的站点.除了Facebook .. Facebook刮刀登陆我的旧托管帐户.所以我猜他们的主机文件或DNS缓存仍然保留旧数据.即使在几个星期后.

我在gezondbenjij.com - > gezondbenjij.nl设置了域别名,并将旧的主机帐户重定向到此.com域.通过这种方式,Facebook通过旁路重定向到正确的站点,但仍然无法刮擦该站点.因此,我尝试在Facebook上分享的网址目前不会生成摘要.

有没有办法强迫(或亲切地问)Facebook更新他们的DNS缓存?我使用了fb URL linter,但它无法解决问题.它只会重置facebook的html缓存,而不是DNS缓存.

ip dns facebook scraper facebook-graph-api

5
推荐指数
1
解决办法
2211
查看次数

在rvest中搜索位置数据

我正在尝试从我使用rvest的网址列表中搜索纬度/经度数据.每个网址都有一个包含特定位置的嵌入式谷歌地图,但网址本身并未显示API所采用的路径.

在查看页面源代码时,我看到我所关注的部分在这里:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
function initialize() {
var myLatlng = new google.maps.LatLng(43.805170,-70.722084);
var myOptions = {
  zoom: 16,
  center: myLatlng,
  mapTypeId: google.maps.MapTypeId.SATELLITE
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

var marker = new google.maps.Marker({
    position: myLatlng, 
    map: map,
    title:"F.E. Wood & Sons - Natural Energy"
});   
Run Code Online (Sandbox Code Playgroud)

现在,如果我可以获得具有LatLng(....)输入的行,我可以使用一些字符串解析操作来导出所有URL的纬度和经度值.

我写了以下代码来获取我的数据:

require(rvest)
require(magrittr)
fetchLatLong<-function(url){
  url<-as.character(url)
  solNum<-html(url)%>%
    html_nodes("#map_canvas")%>%
    html_attr("script")
}
Run Code Online (Sandbox Code Playgroud)

(使用selectorGadget找到"map_canvas"选择器;您可以在此处查看整个源).

我有最糟糕的时间来阅读我所追求的内容.我尝试了很多节点和节点组合,但无济于事.我玩过phantom.js,但问题是它不是js渲染的html内容我正在追求:我正在寻找API查询输入,它被写入页面代码(或者,至少,我的业余眼睛似乎是).

有人有建议吗?

javascript r scraper web-scraping rvest

5
推荐指数
1
解决办法
1244
查看次数

如何操作从X射线刮刀(node.js)检索的默认值

这是我的代码:

var Xray = require('x-ray');  
var x = Xray();
x('http://someurl.com', 'tr td:nth-child(2)', [{  
    text: 'a',
    url: 'a@href'
  }]).write('results.json')
Run Code Online (Sandbox Code Playgroud)

我需要使用每个标记中的第一个单词填充名为"text"的字段.标记值的示例:

"FirstWord SecondWord ThirdWord"

实际结果是文本:FirstWord SecondWord ThirdWord

期望的结果文本:FirstWord

我可以对result.json文件进行后处理,但我不喜欢这样.

javascript scraper node.js

5
推荐指数
1
解决办法
745
查看次数

如何在Heroku上使用Selenium Webdriver?

我正在开发Node.js应用程序,并在其上使用Selenium Webdriver进行抓取。但是,当我在Heroku上部署时,Selenium无法正常工作。我如何使Selenium在Heroku上工作?

selenium webdriver heroku scraper node.js

5
推荐指数
2
解决办法
4987
查看次数

beautifulsoup和机械化获得ajax调用结果

嗨我正在使用python 2.5和beautifulsoup构建一个刮刀,但我正在解决一个问题...网页的一部分是在用户点击某个按钮后生成的,通过使用适当的参数调用特定的javacsript函数来启动ajax请求

有没有办法模拟用户交互并得到这个结果?我遇到了一个机械化模块,但在我看来,这主要用于处理表单......

我将不胜感激任何链接或一些代码示例

python ajax mechanize beautifulsoup scraper

4
推荐指数
1
解决办法
6290
查看次数