我想从以下网站获取内容.如果我使用像Firefox或Chrome这样的浏览器,我可以获得我想要的真实网站页面,但如果我使用Python请求包(或wget命令)来获取它,它将返回一个完全不同的HTML页面.我认为网站的开发者为此做了一些块,所以问题是:
如何使用python请求或命令wget伪造浏览器访问?
抓取和网络抓取之间有区别吗?
如果存在差异,那么为了收集一些网络数据以供以后在定制搜索引擎中使用的数据库,最好的方法是什么?
我正在尝试将变量传递给Puppeteer中的page.evaluate()函数,但是当我使用以下非常简化的示例时,变量是未定义的.evalVar
我是Puppeteer的新手,找不到任何构建的例子,所以我需要帮助将该变量传递给page.evaluate()函数,以便我可以在里面使用它.
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
const evalVar = 'WHUT??';
try {
await page.goto('https://www.google.com.au');
await page.waitForSelector('#fbar');
const links = await page.evaluate((evalVar) => {
console.log('evalVar:', evalVar); // appears undefined
const urls = [];
hrefs = document.querySelectorAll('#fbar #fsl a');
hrefs.forEach(function(el) {
urls.push(el.href);
});
return urls;
})
console.log('links:', links);
} catch (err) {
console.log('ERR:', err.message);
} finally {
// browser.close();
}
})();
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用scrapy从网页上抓取产品信息.我的待删节网页如下所示:
我试图复制next-button-ajax-call但是无法正常工作,所以我试试了selenium.我可以在一个单独的脚本中运行selenium的webdriver,但我不知道如何与scrapy集成.我应该把硒部分放在我的scrapy蜘蛛里?
我的蜘蛛非常标准,如下所示:
class ProductSpider(CrawlSpider):
name = "product_spider"
allowed_domains = ['example.com']
start_urls = ['http://example.com/shanghai']
rules = [
Rule(SgmlLinkExtractor(restrict_xpaths='//div[@id="productList"]//dl[@class="t2"]//dt'), callback='parse_product'),
]
def parse_product(self, response):
self.log("parsing product %s" %response.url, level=INFO)
hxs = HtmlXPathSelector(response)
# actual data follows
Run Code Online (Sandbox Code Playgroud)
任何想法都表示赞赏.谢谢!
我无法找到任何好的网络抓取基于Java的API.我需要抓取的网站也没有提供任何API; 我想使用一些网页遍历所有网页,pageID并在其DOM树中提取HTML标题/其他内容.
除了网络抓取之外还有其他方法吗?
使用JavaScript以及可用的更多技术从Google Chrome扩展程序中执行网页刮取当前未打开的标签的最佳选项有哪些.其他JavaScript库也被接受.
重要的是掩盖抓取行为就像普通的Web请求一样.没有AJAX或XMLHttpRequest的指示,如X-Requested-With: XMLHttpRequest或Origin.
必须可以从JavaScript访问已删除的内容,以便在扩展中进一步操作和呈现,最有可能是作为字符串.
在任何WebKit/Chrome特定的API中是否有任何钩子:s可用于制作正常的Web请求并获取操作结果?
var pageContent = getPageContent(url); // TODO: Implement
var items = $(pageContent).find('.item');
// Display items with further selections
Run Code Online (Sandbox Code Playgroud)
Bonus-points使这项工作从磁盘上的本地文件开始,用于初始调试.但如果这是唯一的一点是停止解决方案,那么就忽略奖励积分.
javascript google-chrome xmlhttprequest google-chrome-extension web-scraping
我正在计划内部使用的webservice,它接受一个参数,一个URL,并返回表示该URL中已解析 DOM的html .通过解决,我的意思是webservice将首先获取该URL的页面,然后使用PhantomJS"渲染"页面,然后在执行所有DHTML,AJAX调用等之后返回结果源.但是发动对每个请求的基础(这是我现在做)幽灵的方式过于缓慢.我宁愿拥有一个PhantomJS实例池,其中一个实例可用于为我的webservice提供最新的调用.
以前有没有做过这方面的工作?我宁愿将这个web服务基于其他人的工作,而不是从头开始为我自己编写一个池管理器/ http代理服务器.
更多上下文:我列出了迄今为止我见过的两个类似的项目,以及为什么我避免了每个项目,这导致了关于管理PhantomJS实例池的问题.
jsdom - 从我所看到它在页面上执行脚本具有很强的功能,但它不会尝试复制浏览器行为,因此如果我将它用作通用的"DOM解析器",那么它最终会成为很多额外的编码来处理各种边缘情况,事件调用等.我看到的第一个例子是必须为我使用node设置的测试应用程序手动调用body标签的onload()函数.这似乎是一个深深的兔子洞的开始.
Selenium - 它只有很多移动部件,因此设置一个池来管理长期存在的浏览器实例将比使用PhantomJS更复杂.我不需要它的任何宏录制/脚本功能.我只想要一个能够获得网页并解析它的DOM的web服务,就好像我用浏览器浏览到那个URL一样(如果我可以让它忽略图像等,甚至更快)
我想使用curl从Google获取结果,以检测潜在的重复内容.是否存在被Google禁止的高风险?
web-scraping ×10
javascript ×3
node.js ×2
python ×2
api ×1
evaluate ×1
frameworks ×1
html ×1
java ×1
jquery ×1
jsdom ×1
phantomjs ×1
puppeteer ×1
scrapy ×1
selenium ×1
web-crawler ×1
wget ×1