转自:
自由爸爸
,
iceblue iceblue
,
王阳阳
详细内容请参考:
Selenium-Python中文文档
python有许多库可以让我们很方便地编写网络爬虫,爬取某些页面,获得有价值的信息!但许多时候,爬虫取到的页面仅仅是一个静态的页面,即网页 的源代码,就像在浏览器上的“查看网页源代码”一样。一些动态的东西如javascript脚本执行后所产生的信息,是抓取不到的,这里暂且先给出这么一 些方案,可用于python爬取js执行后输出的信息。
1. 两种基本的解决方案
1.1 用dryscrape库动态抓取页面
js脚本是通过浏览器来执行并返回信息的,所以,抓取js执行后的页面,一个最直接的方式就是用python模拟浏览器的行为。WebKit 是一个开源的浏览器引擎,python提供了许多库可以调用这个引擎,dryscrape便是其中之一,它调用webkit引擎来处理包含js等的网页!
1 import dryscrape
2 # 使用dryscrape库 动态抓取页面
3 def get_url_dynamic(url):
4 session_req=dryscrape.Session()
5 session_req.visit(url) #请求页面
6 response=session_req.body() #网页的文本
7 #print(response)
8 return response
9 get_text_line(get_url_dynamic(url)) #将输出一条文本
这里对于其余包含js的网页也是适用的!虽然可以满足抓取动态页面的要求,但缺点还是很明显的:慢!太慢了,其实想一想也合理,python调用 webkit请求页面,而且等页面加载完,载入js文件,让js执行,将执行后的页面返回,慢一点也是应该的!除外还有很多库可以调用 webkit:PythonWebkit,PyWebKitGit,Pygt(可以用它写个浏览器),pyjamas等等,听说它们也可以实现相同的功 能!
1.2 selenium web测试框架
selenium是一个web测试框架,它允许调用本地的浏览器引擎发送网页请求,所以,它同样可以实现抓取页面的要求。
# 使用 selenium webdriver 可行,但会实时打开浏览器窗口
1 def get_url_dynamic2(url):
2 driver=webdriver.Firefox() #调用本地的火狐浏览器,Chrom 甚至 Ie 也可以的
3 driver.get(url) #请求页面,会打开一个浏览器窗口
4 html_text=driver.page_source
5 driver.quit()
6 #print html_text
7 return html_text
8 get_text_line(get_url_dynamic2(url)) #将输出一条文本
这也不失为一条临时的解决方案!与selenium类似的框架还有一个windmill,感觉稍复杂一些,就不再赘述!
2. selenium的安装与使用
2.1 selenium的安装
在Ubuntu上安装可以直接使用pip install selenium。由于以下原因:
1. selenium 3.x开始,webdriver/firefox/webdriver.py的__init__中,executable_path="geckodriver";而2.x是executable_path="wires"
2. firefox 47以上版本,需要下载第三方driver,即geckodriver
还需要一些特殊操作:
1. 下载 geckodriverckod 地址:
mozilla/geckodriver
2. 解压后将geckodriverckod 存放至 /usr/local/bin/ 路径下即可:sudo mv ~/Downloads/geckodriver /usr/local/bin/
2.2 selenium的使用
1. 运行报错:
driver = webdriver.chrome()
TypeError: 'module' object is not callable
解决方案:浏览器的名称需要大写Chrome和Firefox,Ie
2. 通过
1 content = driver.find_element_by_class_name('content')
来定位元素时,该方法返回的是FirefoxWebElement,想要获取包含的值时,可以通过
1 value = content.text
转自:自由爸爸,iceblue iceblue,王阳阳详细内容请参考:Selenium-Python中文文档python有许多库可以让我们很方便地编写网络爬虫,爬取某些页面,获得有价值的信息!但许多时候,爬虫取到的页面仅仅是一个静态的页面,即网页 的源代码,就像在浏览器上的“查看网页源代码”一样。一些动态的东西如javascript脚本执行后所产生的信息,是抓取不到的,这里暂且先给出这么一...
下面说说流程:
一、网站分析
首先进入网站,F12检查,本来以为这种低端网站很好
爬取
,是我太低估了web主。可以看到我刷新
网页
之后,出现了很多
js
文件,并且响应获取的代码与源代码不一样,这就不难猜到这个网站是
动态
加载页面。
目前我知道的
动态
网页
爬取
的方法只有这两种:1、从
网页
响应中找到
JS
脚本返回的
JS
ON数据;2、使用
Selenium
对
网页
进行模拟访问。源代码问题好解决,重要的是我获取的源代码中有没有我需要的东西。我再一次进入网站进行F12检查源代码,点击左上角然后在页面
首先splash环境搭建:https://blog.csdn.net/weixin_43343144/article/details/88022756
安装splash可能报的错误:https://blog.csdn.net/weixin_43343144/article/details/89305941
pipenv install scrapy-splash
splash官方文档:h...
上一篇章,讲解了
python
简单
爬取
网页
静态数据的方法。今天,来讲讲如何用
python
爬去数据用
js
动态
加载的
网页
。
所用到的库
selenium
以及与它搭配的webdriver,用来打开浏览器,从
网页
中读取数据的过程,这样才能找到数据。
代码如下:
from
selenium
import webdriver
import time
import xlwt
import datetime
'''get the url of the aim'''
url = 'https://m.dewu.com/rout
有的页面的很多部分都是用
JS
生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有
JS
engine,所以
爬取
的都是静态页面,对于
JS
生成的
动态
页面都无法获得
官网http://splash.readthedocs.io/en/stable/
利用第三方中间件来提供
JS
渲染服务: scrapy-splash 等
利用webkit或者基于webkit库
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
onpath = os.getcwd()
练习2-6 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
第二十城有我:
Ubuntu下创建新用户
一位开朗的网友:
Endnote生成的中英文混排参考文献中“等”与“et al”的处理
学术垃圾制造者1号:
练习3-2 编写一个函数escape(s,t),将字符串t复制到字符串s中,并在复制过程中将换行符、制表符等不可见字符转换为\n、\t等相应的可见的转义字符序列。要求使用switch语句。
m0_66907734:
LaTex自定义新命令(newcommand、def)
念心科道尊: