导航:首页 > 编程语言 > phantomjs网络爬虫

phantomjs网络爬虫

发布时间:2023-04-30 01:28:17

❶ 现在用node写网页爬虫用phantomjs和jsdom各有什么利弊

phantomjs实际上就是一个浏览器,只是不显示界面,可以执行页面的js脚本等。
jsdom主要是方便解析html文本,相当于对字符串进行分析。

phantomjs对资源的要求和消耗都比较大,如果需要的内容从网页源代码中可以解析出来,推荐用jsdom,如果页面复杂,推荐用phantomjs

❷ Python+Selenium+PhantomJs爬虫 怎么抓取弹出新标签页的内容

在工程中新建一个Python Package(包),右键点击src, New>PydevPackage,选择源文件路径及输入包名: 在_init_.py,输入print (“Hello World”),按F9即可看到输出结果,说明开发环境安装成功!

❸ 爬虫框架都有什么

设计框架的目的就是将爬虫流程统一化,将通用的功能进行抽象,减少重复工作。设计网络爬虫框架需要哪些组件呢?下面ipidea全球IP为大家介绍一下。

爬虫框架要处理很多的URL,我们需要设计一个队列存储所有要处理的 URL,这种先进先出的数据结构非常符合这个需求。 将所有要下载的URL存储在待处理队列中,每次下载会取出一个,队列中就会少一个。我们知道有些URL的下载会有反爬虫策略,所以针对这些请求需要做一些特殊的设置,进而可以对URL进行封装抽出 Request。

页面下载器如果没有,用户就要编写网络请求的处理代码,这无疑对每个 URL 都是相同的动作。 所以在框架设计中我们直接加入它就好了,至于使用什么库来进行下载都是可以的,你可以用 httpclient 也可以用okhttp在本文中我们使用一个超轻量级的网络请求库 oh-my-request (没错,就是在下搞的)。优秀的框架设计会将这个下载组件置为可替换,提供默认的即可。

爬虫调度器,调度器和我们在开发 web 应用中的控制器是一个类似的概念,它用于在下载器、解析器之间做流转处理。 解析器可以解析到更多的 URL 发送给调度器,调度器再次的传输给下载器,这样就会让各个组件有条不紊的进行工作。

网页解析器我们知道当一个页面下载完成后就是一段 HTML 的 DOM 字符串表示,但还需要提取出真正需要的数据以前的做法是通过String的API 或者正则表达式的方式在DOM 中搜寻,这样是很麻烦的,框架 应该提供一种合理、常用、方便的方式来帮助用户完成提取数据这件事儿。常用的手段是通过xpath或者css选择器从DOM中进行提取,而且学习这项技能在几乎所有的爬虫框架中都是适用的。

数据处理,普通的爬虫程序中是把网页解析器和数据处理器合在一起的,解析到数据后马上处理。 在一个标准化的爬虫程序中,他们应该是各司其职的,我们先通过解析器将需要的数据解析出来,可能是封装成对象。然后传递给数据处理器,处理器接收到数据后可能是存储到数据库,也可能通过接口发送给老王。

❹ 如何防范phantomjs爬虫

phantomjs实际上就是一个浏览器,只是不显示界面,可以执行页面的js脚本等。jsdom主要是方便解析html文本,相当于对字符串进行分析。phantomjs对资源的要求和消耗都比较大,如果需要的内容从网页源代码中可以解析出来,推荐用jsdom,如果页面复杂,推荐用phantomjs

❺ 如何将爬虫完全伪装成为用户在浏览器的点击行为

1.伪装http header,我们可以使用phanomjs的API来实现:

派生到我的代码片
1. <span style="font-family:SimSun;font-size:18px;">page.customHeaders = {
2. "Referer" : referrer,
3. "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER 1.1"
4. };</span>

2.伪造referer欺骗js,这一点其实就要麻烦一些:我们需要首先打开referer页面,然后再模拟点击消息转到目的网站,具体方法如下:

1. <span style="font-family:SimSun;font-size:18px;">page.onLoadFinished = function(status){
2.
3. // Only once do
4. if ( page.firstLoad ) {
5. page.firstLoad = false;
6. // Inject and Click a Link to our target
7. page.evaluate(function (href) {
8. // Create and append the link
9. var link = document.createElement('a');
10. link.setAttribute('href', href);
11. document.body.appendChild(link);
12.
13. // Dispatch Click Event on the link
14. var evt = document.createEvent('MouseEvents');
15. evt.initMouseEvent('click', true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, link);
16. link.dispatchEvent(evt);
17. }, targetUrl);
18. } else {
19. // 此处我们已经成功伪造referer信息,并且打开Target url页面
20. console.log(targetUrl+"\t"+page.url);
21.
22. };
23. };</span>
3.伪造User Agent欺骗js,这一点其实就要麻烦一些,但是我们也可以通过phantomjs的API来实现:
在CODE上查看代码片
1. <span style="font-family:SimSun;font-size:18px;">page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER";</span>

4. 使用代理,这个phantomjs支持的就更好啦,调用的时候加入代理的参数即可:
派生到我的代码片
1. <span style="font-family:SimSun;font-size:18px;">phantomjs --proxy=ip:port</span>

5.添加cookies(我知道phantomjs设置cookies可行,目前还没有验证,据称有以下三种方法):

page.customHeaders = {Cookie: xxx}
phantom.addCookie({
'name': 'yandexuid',
'value': '21611441383258191',
'domain': '.yandex.ru'))
});
phantomjs --cookies-file=cookies.txt

说到这里其实我们已经得到了一个动态的爬虫,它可以之行js代码,可以抓取到网页的动态内容,具有浏览器的header并且无法被js、ajax、java、php代码识别,甚至也无法被后台的日志分析识别。目前为止该方法的qps并不高,因为加载js和phantomjs并发性能不高。
其实这个爬虫有很多的用处:
1.伪造点击信息,最近CNZZ公布了中小网站的流量来源中30%是来自奇虎360的,众所周知CNZZ是植入js代码统计网站的访问量和来源的。这些完全可以用我们的代码伪造访问量,并且伪造访问来源呀。
2. 爬取网站动态内容,有很多网站是基于ajax和js设计的,现在我们就可以爬取到这些代码执行得到的数据。
3.逃避反爬虫策略,这个就太明显了。

❻ python怎么让phantomjs加载完网页才返回

一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此时,我们使用web自动化测试化工具Selenium+无界面浏览器PhantomJS来抓取javascript渲染的页面,下面实现一个简单的爬取
环境搭建
准备工具:python3.5,selenium,phantomjs
我的电脑里面已经装好了python3.5
安装Selenium

1

pip3 install selenium

安装Phantomjs
按照系统环境下载phantomjs,下载完成之后,将phantomjs.exe解压到python的script文件夹下
使用selenium+phantomjs实现简单爬虫

1
2
3
4
5
6
7
8
9

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()

selenium+phantomjs的一些使用方法
设置请求头里的user-Agent

1
2
3
4
5
6
7
8
9
10
11
12

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

dcap = dict(DesiredCapabilities.PHANTOMJS) #设置useragent
dcap['phantomjs.page.settings.userAgent'] = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ') #根据需要设置具体的浏览器信息
driver = webdriver.PhantomJS(desired_capabilities=dcap) #封装浏览器信息
driver.get(') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()

请求超时设置
webdriver类中有三个和时间相关的方法:
1.pageLoadTimeout 设置页面完全加载的超时时间,完全加载即完全渲染完成,同步和异步脚本都执行完
2.setScriptTimeout 设置异步脚本的超时时间
3.implicitlyWait 识别对象的智能等待时间

1
2
3
4
5
6
7

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5) #设置超时时间
driver.get('')
print(driver.title)
driver.quit()

设置浏览器窗口大小
调用启动的浏览器不是全屏的,有时候会影响我们的某些操作,所以我们可以设置全屏

1
2

driver.maximize_window() #设置全屏
driver.set_window_size('480','800') #设置浏览器宽480,高800

元素定位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5)
driver.get('')
try:
driver.get('')
driver.find_element_by_id('kw') # 通过ID定位
driver.find_element_by_class_name('s_ipt') # 通过class属性定位
driver.find_element_by_name('wd') # 通过标签name属性定位
driver.find_element_by_tag_name('input') # 通过标签属性定位
driver.find_element_by_css_selector('#kw') # 通过css方式定位
driver.find_element_by_xpath("//input[@id='kw']") # 通过xpath方式定位
driver.find_element_by_link_text("贴吧") # 通过xpath方式定位
print(driver.find_element_by_id('kw').tag_name ) # 获取标签的类型
except Exception as e:
print(e)
driver.quit()

操作浏览器前进或后退

1
2
3
4
5
6
7
8
9
10
11
12
13
14

from selenium import webdriver
driver = webdriver.PhantomJS()
try:
driver.get('') #访问网络首页
driver.save_screenshot('1.png')
driver.get('') #
driver.save_screenshot('2.png')
driver.back() #回退到网络首页
driver.save_screenshot('3.png')
driver.forward() #前进到新浪首页
driver.save_screenshot('4.png')
except Exception as e:
print(e)
driver.quit()

❼ 在docker中远程调用PhantomJS

背景:写了一个爬虫程序使用的docker部署,部署拆逗模后在旅缓docker中安装PhantomJS 比较麻烦,于是想到了再另一个docker容器中部署一个PhantomJS ,通过远程调用的方式来使用它

通过指返Java 调用:

通过python调用,先运行 pip install selenium安装selenium

监控一下docker的日志,发现调用成功

参考:

❽ 无头浏览器是什么它有什么用

什么是无头浏览器 平时我们上网查阅信息、观看视频等活动,一般都是通过浏览器完成的,IE、chrome、火狐等都是我们经常使用的浏览器,它们都拥有非常好用的可视化操作界面,配合鼠标就可以进行网上活动。

而无头浏览器也叫做无界面浏览器,它可以运行在服务器端,也具有普通浏览器的能力,只是它没有界面,

常见的框架有Puppeteer、Phantomjs等
无头浏览器的特点
1、使用方式

我们以Phantomjs为例,既可以以cli方式使用,也可以在代码中require进去,它甚至可以提供一个类似于node那样的REPL环境。

2、加载网络资源

既然是浏览器,加载网络资源显然是其基本的能力,resourceReceived和resourceRequested这两个回调函数可以监控加载的资源,利用它们就可以做一些网络监控。既然能获取网页的内容,那么就可以用来做爬虫!

3、截图

既然是无界面的,那如果我们想看加载的页面是什么样子的,怎么办?它提供了截图功能,使用render方法就可以生成页面快照,还提供了设置网页大小等功能。

4、插入外部资源

它可以向页面中插入外部资源,比如插入一个js,这一点上比较像chrome插件。

5、生成自定义网页

它既能获取人家的网页,同时也能生成自己的网页,设置content属性就行。

6、提供document和window对象

在服务器中是不存在document和window对象的,但是Phantomjs提供了这两个变量。

7、操作页面

既然Phantomjs提供了document和window这两大对象,那么我们就可以像在普通浏览器里面一样使用它们的方法槐游,比如操作dom元素、发送dom事件等。

8、测试

Phantomjs本身并不是测试框架,但是它可以配合jasmine等测试框架进行自动化测试。

无头就是headless 的中文,所谓无头浏览器就是没有用户界面的浏览器。

它可以运行在服务器端,通过命令行的方式调用,比铅隐销如需要截取任意网站的截图,网址由用户输入,那就需要在服务器端装一个headless浏览器,可以命令调用来截图。携岩

除了截图,还能操作DOM,做一些爬虫的事情,在服务器端完成自动化操作。

常用的有三个:Selenium,PhantomJS,Chrome-headless 。

使用举例:

这样就实现了截取网络这个网站的页面。

更复杂的操作就要看手册了

❾ 使用phantomjs爬取页面内容时,内存占用过多如何解决

怎说,我当时写爬虫的时候,也是开了多台gecodriver的进程,但是我用Python监控了cpu的资源管理,占用率太高了我就kill掉一部分的进程,如果是进程本身就死掉当然会kill并且有重启机制。当然最后稳定下来确定了每台机器开几个进程利用率很高。

❿ python爬虫用什么框架

python爬虫框架概述
爬虫框架中比较好用的是 Scrapy 和PySpider。pyspider上手更简单,操作更加简便,因为它增加了 WEB 界面,写爬虫迅速,集成了phantomjs,可以用来抓取js渲染的页面。Scrapy自定义程度高,比 PySpider更底层一些,适合学习研究,需要学习的相关知识多,不过自己拿来研究分布式和多线程等等是非常合适的。
PySpider
PySpider是binux做的一个爬虫架构的开源化实现。主要的功能需求是:
抓取、更新调度多站点的特定的页面
需要对页面进行结构化信息提取
灵活可扩展,稳定可监控
pyspider的设计基础是:以python脚本驱动的抓取环模型爬虫
通过python脚本进行结构化信息的提取,follow链接调度抓取控制,实现最大的灵活性
通过web化的脚本编写、调试环境。web展现调度状态
抓取环模型成熟稳定,模块间相互独立,通过消息队列连接,从单进程到多机分布式灵活拓展
pyspider的架构主要分为 scheler(调度器), fetcher(抓取器), processor(脚本执行):
各个组件间使用消息队列连接,除了scheler是单点的,fetcher 和 processor 都是可以多实例分布式部署的。 scheler 负责整体的调度控制
任务由 scheler 发起调度,fetcher 抓取网页内容, processor 执行预先编写的python脚本,输出结果或产生新的提链任务(发往 scheler),形成闭环。
每个脚本可以灵活使用各种python库对页面进行解析,使用框架API控制下一步抓取动作,通过设置回调控制解析动作。
Scrapy
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试
Scrapy主要包括了以下组件:
引擎(Scrapy): 用来处理整个系统的数据流处理, 触发事务(框架核心)
调度器(Scheler): 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
下载器(Downloader): 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
爬虫(Spiders): 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
项目管道(Pipeline): 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
下载器中间件(Downloader Middlewares): 位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
爬虫中间件(Spider Middlewares): 介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。
调度中间件(Scheler Middewares): 介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。
Scrapy运行流程大概如下:
首先,引擎从调度器中取出一个链接(URL)用于接下来的抓取
引擎把URL封装成一个请求(Request)传给下载器,下载器把资源下载下来,并封装成应答包(Response)
然后,爬虫解析Response
若是解析出实体(Item),则交给实体管道进行进一步的处理。
若是解析出的是链接(URL),则把URL交给Scheler等待抓取

阅读全文

与phantomjs网络爬虫相关的资料

热点内容
ps前往文件夹 浏览:694
信捷plc编程用哪个软件 浏览:939
vba导入文件 浏览:690
更新后版本英文怎么说 浏览:267
桌面云配置文件分离 浏览:505
iphone5如何升级4g网络 浏览:5
团购是在哪个app 浏览:897
打开多个word文档图片就不能显示 浏览:855
腾讯新闻怎么切换版本 浏览:269
app安装失败用不了 浏览:326
桌面文件鼠标点开会变大变小 浏览:536
手机误删系统文件开不了机 浏览:883
微信兔子甩耳朵 浏览:998
android蓝牙传文件在哪里 浏览:354
苹果6s软解是真的吗 浏览:310
c语言代码量大 浏览:874
最新网络卫星导航如何使用 浏览:425
以下哪些文件属于图像文件 浏览:774
zycommentjs 浏览:414
确认全血细胞减少看哪些数据 浏览:265

友情链接