python用selenium爬取网页数据(python爬虫获取网页数据)

http://www.itjxue.com  2023-04-11 12:56  来源:未知  点击次数: 

Python + selenium + 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()

从零开始学Python-使用Selenium抓取动态网页数据

AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行局部更新。传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面。

因为传统的网页在传输数据格式方面,使用的是 XML 语法,因此叫做 AJAX ,其实现在数据交互基本上都是使用 JSON 。使用AJAX加载的数据,即使使用了JS将数据渲染到了浏览器中,在 右键-查看网页源代码 还是不能看到通过ajax加载的数据,只能看到使用这个url加载的html代码。

法1:直接分析ajax调用的接口。然后通过代码请求这个接口。

法2:使用Selenium+chromedriver模拟浏览器行为获取数据。

Selenium 相当于是一个机器人。可以模拟人类在浏览器上的一些行为,自动处理浏览器上的一些行为,比如点击,填充数据,删除cookie等。 chromedriver 是一个驱动 Chrome 浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:

现在以一个简单的获取百度首页的例子来讲下 Selenium 和 chromedriver 如何快速入门:

参考:Selenium的使用

直接直接分析ajax调用的接口爬取

selenium结合lxml爬取

从零开始学python爬虫(八):selenium提取数据和其他使用方法

知识点:

知识点:了解 driver对象的常用属性和方法

注意:最新版本的selenium已经取消了这种格式,取而代之的是:

你要先导入:

然后再:

知识点:掌握 driver对象定位标签元素获取标签对象的方法

代码实现,如下,获取腾讯新闻首页的新闻标签的内容。

知识点:掌握 元素对象的操作方法

参考代码示例:

知识点:掌握 selenium控制标签页的切换

知识点:掌握 selenium控制frame标签的切换

知识点:掌握 利用selenium获取cookie的方法

知识点:掌握 selenium控制浏览器执行js代码的方法

知识点:掌握 手动实现页面等待

知识点:掌握 selenium开启无界面模式

知识点:了解 selenium使用代理ip

知识点:了解 selenium替换user-agent

Python爬虫实战(3)selenium完成瀑布流数据爬取

爬取时间:2021/01/27

系统环境:Windows 10

所用工具:Jupyter Notebook\Python 3.0

涉及的库:selenium\time\pandas\matplotlib\jieba\stylecloud

蛋肥想法: 借助selenium,实现对“查看更多”的自动点击,目标是获取2020年的文章相关数据。

蛋肥想法: 36氪的数据很满足强迫症,没有空格换行,只需筛选出2020年的数据保存。

蛋肥想法: 此次重点是学习selenium,所以只简单做一下数据可视化。

python爬取大量数据(百万级)

当用python爬取大量网页获取想要的数据时,最重要的问题是爬虫中断问题,python这种脚本语言,一中断

进程就会退出,怎么在中断后继续上次爬取的任务就至关重要了。这里就重点剖析这个中断问题。

第一个问题: 简单点的用动态代理池就能解决,在爬取大量数据的时候,为了速度不受影响,建议使用一些缓

存的中间件将有效的代理 ip 缓存起来,并定时更新。这里推荐 github 这个仓库

, 它会做ip有效性验证并将 ip 放入 redis ,不过实现过于复杂

了,还用到了 db ,个人觉得最好自己修改一下。困难点的就是它会使用别的请求来进行判断当前的ip是否

是爬虫,当我们过于聚焦我们的爬虫请求而忽略了其他的请求时,可能就会被服务器判定为爬虫,进而这个ip

会被列入黑名单,而且你换了ip一样也会卡死在这里。这种方式呢,简单点就用 selenium + chrome 一个一个

去爬,不过速度太慢了。还是自己去分析吧,也不会过复杂的。

第二个问题: 网络连接超时是大概率会遇到的问题,有可能是在爬取的时候本地网络波动,也有可能是爬

取的服务端对ip做了限制,在爬取到了一定量级的时候做一些延迟的操作,使得一些通用的 http 库超时

( urllib )。不过如果是服务端动的手脚一般延迟不会太高,我们只需要人为的设置一个高一点的

timeout 即可(30 秒),最好在爬取开始的时候就对我们要用的爬取库进行一层封装,通用起来才好改

动。

第三个问题: 在解析大量静态页面的时候,有些静态页面的解析规则不一样,所以我们就必须得做好断点

续爬的准备了( PS : 如果简单的忽略错误可能会导致大量数据的丢失,这就不明智了)。那么在调试的过

程中断点续爬有个解决方案,就是生产者和消费者分离,生产者就是产生待爬 url 的爬虫,消费者就是爬取

最终数据的爬虫。最终解析数据就是消费者爬虫了。他们通过消息中间件连接,生产者往消息中间件发送待

爬取的目标信息,消费者从里面取就行了,还间接的实现了个分布式爬取功能。由于现在的消费中间件都有

ack 机制,一个消费者爬取链接失败会导致消息消费失败,进而分配给其他消费者消费。所以消息丢失的

概率极低。不过这里还有个 tips , 消费者的消费超时时间不能太长,会导致消息释放不及时。还有要开启

消息中间价的数据持久化功能,不然消息产生过多而消费不及时会撑爆机器内存。那样就得不偿失了。

第四个问题: 这种情况只能 try except catch 住了,不好解决,如果单独分析的话会耗费点时间。但在

大部分数据 (99%) 都正常的情况下就这条不正常抛弃就行了。主要有了第三个问题的解决方案再出现这

种偶尔中断的问就方便多了。

希望能帮到各位。

python爬虫怎么做?

大到各类搜索引擎,小到日常数据采集,都离不开网络爬虫。爬虫的基本原理很简单,遍历网络中网页,抓取感兴趣的数据内容。这篇文章会从零开始介绍如何编写一个网络爬虫抓取数据,然后会一步步逐渐完善爬虫的抓取功能。

工具安装

我们需要安装python,python的requests和BeautifulSoup库。我们用Requests库用抓取网页的内容,使用BeautifulSoup库来从网页中提取数据。

安装python

运行pipinstallrequests

运行pipinstallBeautifulSoup

抓取网页

完成必要工具安装后,我们正式开始编写我们的爬虫。我们的第一个任务是要抓取所有豆瓣上的图书信息。我们以/subject/26986954/为例,首先看看开如何抓取网页的内容。

使用python的requests提供的get()方法我们可以非常简单的获取的指定网页的内容,代码如下:

提取内容

抓取到网页的内容后,我们要做的就是提取出我们想要的内容。在我们的第一个例子中,我们只需要提取书名。首先我们导入BeautifulSoup库,使用BeautifulSoup我们可以非常简单的提取网页的特定内容。

连续抓取网页

到目前为止,我们已经可以抓取单个网页的内容了,现在让我们看看如何抓取整个网站的内容。我们知道网页之间是通过超链接互相连接在一起的,通过链接我们可以访问整个网络。所以我们可以从每个页面提取出包含指向其它网页的链接,然后重复的对新链接进行抓取。

通过以上几步我们就可以写出一个最原始的爬虫。在理解了爬虫原理的基础上,我们可以进一步对爬虫进行完善。

写过一个系列关于爬虫的文章:/i6567289381185389064/。感兴趣的可以前往查看。

Python基本环境的搭建,爬虫的基本原理以及爬虫的原型

Python爬虫入门(第1部分)

如何使用BeautifulSoup对网页内容进行提取

Python爬虫入门(第2部分)

爬虫运行时数据的存储数据,以SQLite和MySQL作为示例

Python爬虫入门(第3部分)

使用seleniumwebdriver对动态网页进行抓取

Python爬虫入门(第4部分)

讨论了如何处理网站的反爬虫策略

Python爬虫入门(第5部分)

对Python的Scrapy爬虫框架做了介绍,并简单的演示了如何在Scrapy下进行开发

Python爬虫入门(第6部分)

(责任编辑:IT教学网)

更多

推荐其它软件文章