js 抓取网页内容(pyopenssl.whl安装的时候需要用pipinstall?.. )
优采云 发布时间: 2021-10-03 03:10js 抓取网页内容(pyopenssl.whl安装的时候需要用pipinstall?..
)
最近在学习scrapy爬取动态js加载页面,写这个做个记录。
scrapy需要的环境是python2.7+lxml+pyopenssl+twisted+pywin32等,网上有教程可以参考等,注意安装pyopenssl.whl时需要使用pip install。 ..whl 另外,如果使用mysql,需要安装mysqldb模块。
最佳安装教程:
补充:scrapy1.1中支持Python3。官方文档说在linux环境下只支持python3,但是windows下也可以试试。供参考,中间需要手动下载lxml,使用pip install。..whl 执行安装,手动安装pypiwin32,然后导入twisted.txt的两个文件。
入门教程看官方文档,英文原版和中文版#topics-selectors-htmlcode。
Xpath是scrapy内置的一个比较简单的dom解析方法,但是作为一个习惯了php的simple_html_dom解析的人,还是很偏向xpath的。Xpath 过于严格,无法通过跳跃进行查询。必须逐层解析。,虽然xpath很麻烦,但是比较容易出错。Response.xpath().extract() 和 response.xpath().re() 以列表的形式执行。这点需要注意,在存储数据库时需要注意。此外,它的执行将由 Unicode 编码。在 re() 中执行常规匹配时,似乎需要 re(u'')。似乎是这样。这还没有完全理解。我在互联网上看到过。将研究 re(r'') 的措辞。. .
还有一种解析的方法,也是scrapy内置的css选择器。具体选拔文件可在w3cschool查阅。这里有一个选择方法,比如: li:nth-of-type(2) 是选择的第二个li节点
在使用scrapy的过程中,重点学习了如何抓取动态js加载的页面。现在很多网站在源代码中没有太多信息。主要信息只有从js文件加载后才能在review元素中找到。
所以现在我们需要一些东西来模拟浏览器,phantomjs是一个强大的模拟浏览器的工具,phantomjs是一个很小的浏览器内核,调用它可以非常方便快捷地进行分析。
cmd = 'phantomjs constructDom.js "%s"' % response.url
print "cmd:",cmd
stdout,stderr = subprocess.Popen(cmd,shell= True,stdout = subprocess.PIPE,stderr = subprocess.PIPE).communicate()
sel = Selector(text=stdout)
constructDom.js是一个解析网页的js,这是在网上的一段代码,拿来使用了
var page = require('webpage').create(),
system = require('system'),
address;
if(system.args.length === 1){
phantom.exit(1);
}else{
address = system.args[1];
page.open(address, function (status){
if(status !== 'success'){
phantom.exit();
}else{
var sc = page.evaluate(function(){
return document.body.innerHTML;
});
window.setTimeout(function (){
console.log(sc);
phantom.exit();
},1000);
}
});
}
上面四句展示了一个调用过程,这里只是调用了它的接口,我对phantomjs还没有太了解。
有时候需要让页面停留一段时间以等待加载,这时候得需要js代码sleep一段时间,但是js又没有sleep这个方法,而setTimeOut相当于另起了一个线程,并不能实现所需的sleep功能,下面一段代码可以间接的实现sleep的功能,相当于sleep了1秒钟。
<p>var t = Date.now();
function sleep(d){
while(Date.now - t