谁有《末日末日时在做什么轻小说第二部》的小说百度云资源,能给我么?谢谢

爬虫再探实战(三)———爬取动态加载页面——selenium - 不秩稚童 - 博客园
    自学python爬虫也快半年了,在目前看来,我面临着三个待解决的爬虫技术方面的问题:动态加载,多线程并发抓取,模拟登陆。目前正在不断学习相关知识。下面简单写一下用selenium处理动态加载页面相关的知识。目标&&抓取所有的高考录取分数信息。
    对于动态加载,开始的时候是看到Selenium+Phantomjs的强大,直接就学的这个。打开网页查看网页源码(注意不是检查元素)会发现要爬取的信息并不在源码里面。也就是说,从网页源码无法通过解析得到数据。Selenium+Phantomjs的强大一方面就在于能将完整的源码抓取到,上代码。
from selenium import webdriver
def get_grade(url):
print(url)
#假定9999端口开启tor服务
service_args = ['--proxy=localhost:9999', '--proxy-type=socks5', ]
driver = webdriver.PhantomJS(executable_path=这里是PhantomJS的绝对路径)
driver.get(url)
data = driver.page_source
print(data)
get("/soudaxue/queryProvince.html?page=1")
  这里还用到了匿名爬虫,这里呢我也只是到了能用的水平,具体原理还不太懂。。。这样就能拿到完整的源码,是不是很简单呢?当然简单啦,不过简单的代价就是牺牲速度。
这个程序还不算复杂,当抓取量大的时候,模拟抓取的效率就会变得很低(还不会多线程。。。不知道用多线程能不能提速)。下面是此项目的完整代码:
import xlsxwriter
from selenium import webdriver
from bs4 import BeautifulSoup
def get_grade(url):
print(url)
#假定9999端口开启tor服务
service_args = ['--proxy=localhost:9999', '--proxy-type=socks5', ]
driver = webdriver.PhantomJS(executable_path=r"F:\Techonolgoy\Python\file\spider\spider_tools\JS\1\phantomjs.exe")
driver.get(url)
data = driver.page_source
# print(data)
soup = BeautifulSoup(data, 'lxml')
grades = soup.find_all('tr')
for grade in grades:
if '&td&' in str(grade):
grade_text =grade.get_text()
print(grade_text)
grade_text = str(grade_text)
city = grade_text[:-13]
worksheet.write(i,0,city)
time = grade_text[-13:-9]
worksheet.write(i,1,time)
subs = grade_text[-9:-7]
worksheet.write(i,2,subs)
s = grade_text[-7:-3]
worksheet.write(i,3,s)
grade = grade_text[-3:]
worksheet.write(i,4,grade)
workbook = xlsxwriter.Workbook('grades.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:A',10)
worksheet.set_column('B:B', 10)
worksheet.set_column('C:C', 10)
worksheet.set_column('D:D', 10)
worksheet.set_column('E:E', 10)
urls = ['/soudaxue/queryProvince.html?page='+str(num)
for num in range(1,166)]
for url in urls:
get_grade(url)
workbook.close()
  家里面网速太慢,一共用了20分钟才爬取完毕。。。抓取到的EXCEL文件格式如下:
    我是被这模拟抓取的龟速折磨的够心累的,所以,经大牛们指点,找到了处理这类问题的另一个方法&&直接清求json文件获取数据!这个放到下面再写。&>&&>&&>&&>&selenium-ide-2.5.0功能测试组件
selenium-ide-2.5.0功能测试组件
上传大小:3.29MB
selenium-ide-2.5.0功能测试组件
selenium-ide-2.5.0功能测试组件
综合评分:5(1位用户评分)
所需积分:2
下载次数:16
审核通过送C币
创建者:chenfeng522111
创建者:qq
创建者:zhangguo5
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
selenium-ide-2.5.0功能测试组件
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
quchunliang1006
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:Python PhatomJS 和Selenium动态加载页面 获取图片内容
时间: 18:11:17
&&&& 阅读:51
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&随笔中的代码拷贝自
/Albert-Lee/p/6275146.html
感谢阿里波特,通过学习自己做了一些注释,作为总结和记录。
1 from selenium import webdriver
2 import requests
3 from bs4 import BeautifulSoup
4 import os
5 import time
6 #定义函数时,尽量写上默认参数,字符=‘‘,数字=0,特殊对象也要定义默认值,这样就可以简单的通过.来得到参数具有的性质等。
7 class BeautifulPicture():
def __init__(self):
# 给请求指定一个请求头来模拟chrome浏览器
self.headers={‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1‘}
self.web_url=‘‘
self.folder_path=r‘E:\Python Code\test‘
def request(self,url):#返回网页的response
r=requests.get(url)#获得目标网址的response对象
def mkdir(self,path=‘‘):#创建文件夹
path=path.strip()#删除空白字符
isExists=os.path.exists(path)#判断路径是否存在
if not isExists:#如果不存在,则创建文件夹
print(‘创建名字叫做‘,path,‘的文件夹‘)
os.makedirs(path)#创建目标文件夹
print(‘创建成功‘)
return True#文件夹不存在返回True
else:#如果存在,返回
print(path,‘文件夹已经存在了,不再创建了‘)
return False
def scroll_down(self,driver=webdriver.PhantomJS(),times=1):#模拟下拉操作
for i in range(times):
print(‘开始执行第‘,str(i+1),‘次下拉操作‘)
driver.execute_script(‘window.scrollTo(0, document.body.scrollHeight);‘)#执行js代码操作,页面滚动到指定位置(x,y)
print(‘第‘,str(i+1),‘次下拉操作执行完毕‘)
print("第", str(i + 1), "次等待网页加载......")
time.sleep(20)
def get_files(self,path=‘‘):
pic_names=os.listdir(path)#获取目录中的内容
return pic_names
def save_img(self,url,file_name):
print(‘开始请求图片地址,过程比较长。。。‘)
img=self.request(url)#img是个response对象
print(‘开始保存图片‘)
f=open(file_name,‘ab‘)
# rU或Ua以只读方式打开
# w 以写方式打开
# a 以追加模式打开
# r+ 以读写方式打开
# rb 二进制读
# wb 二进制写 ab 二进制追加 rb+ 二进制读写 wb+二进制读写 ab+二进制读写
f.write(img.content)
#如果想获取文本,可以通过response.text,如果想获取图片、文件,可以通过response.content。
# resp.text返回的是Unicode型的数据。
# resp.content返回的是bytes型也就是二进制的数据。
print(file_name,‘图片保存成功‘)
def get_pic(self):
print(‘开始网页请求‘)
#使用selenium通过PhantomJS来进行网络请求
driver=webdriver.PhantomJS()
driver.get(self.web_url)#这里就不再通过urllib进行网络请求了
self.scroll_down(driver=driver,times=5)#下拉5次,可以自己设定
print(‘开始获取所有a标签‘)
#获取网页中class为cV68d的所有a标签
all_a=BeautifulSoup(driver.page_source,‘lxml‘).find_all(‘a‘,class_=‘cV68d‘)
#按照css类名搜索tag的功能非常实用,但标识css类名的关键字class在Python中是保留字,实用class做参数会导致语法错误。同BS4.1.1版本开始,通过class_参数搜索。
print(‘开始创建文件夹‘)
is_new_folder=self.mkdir(self.folder_path)
print(‘开始切换文件夹‘)
os.chdir(self.folder_path)#改变当前工作路径,.gwd()为获取当前工作目录
print(‘a标签的数量是:‘,len(all_a))
file_names=self.get_files(self.folder_path)#获取当前工作目录下的文件名?干吗用?
for a in all_a:
img_str=a[‘style‘]
print(‘a标签的style内容是:‘,img_str)
first_pos=img_str.index(‘(‘)+1
second_pos=img_str.index(‘)‘)
img_url=img_str[first_pos:second_pos]
# 注:为了尽快看到下拉加载的效果,截取高度和宽度部分暂时注释掉,因为图片较大,请求时间较长。
# 获取高度和宽度的字符在字符串中的位置
# width_pos = img_url.index(‘&w=‘)
# height_pos = img_url.index(‘&q=‘)
# width_height_str = img_url[width_pos : height_pos] #使用切片功能截取高度和宽度参数,后面用来将该参数替换掉
# print(‘高度和宽度数据字符串是:‘, width_height_str)
# img_url_final = img_url.replace(width_height_str, ‘‘)
#把高度和宽度的字符串替换成空字符
# print(‘截取后的图片的url是:‘, img_url_final)
# 截取url中参数前面、网址后面的字符串为图片名
<span style="color: #0
name_start_pos=img_url.index(‘.com/‘)+5
<span style="color: #1
name_end_pos=img_url.index(‘?‘)
<span style="color: #2
img_name=img_url[name_start_pos:name_end_pos]+‘.jpg‘
<span style="color: #3
img_name=img_name.replace(‘/‘,‘‘)
<span style="color: #4
<span style="color: #5
if is_new_folder:#如果文件夹不存在,那么肯定没有重复文件,则直接保存文件。
<span style="color: #6
self.save_img(img_url,img_name)
<span style="color: #7
<span style="color: #8
if img_name not in file_names:#如果文件夹存在,需要判断是否有重复文件
<span style="color: #9
self.save_img(img_url, img_name)
# 调用save_img方法来保存图片
<span style="color: #0
<span style="color: #1
print("该图片已经存在:", img_name, ",不再重新下载。")
<span style="color: #2
<span style="color: #3
<span style="color: #4 beauty = BeautifulPicture()
#创建类的实例
<span style="color: #5 beauty.get_pic()
#执行类中的方法
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&国之画&&&& &&
版权所有 京ICP备号-2
迷上了代码!Python爬虫小白入门(四)PhatomJS+Selenium第一篇_python_ThinkSAAS
Python爬虫小白入门(四)PhatomJS+Selenium第一篇
Python爬虫小白入门(四)PhatomJS+Selenium第一篇
内容来源: 网络
在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页。所以不能够通过页码获取页面的url来分别发送网络请求。我也尝试了其他方式,比如下拉的时候监控http请求,看看请求是否有规律可以模拟。后来发现请求并没有规律,也就是不能够模拟http请求来获取新的数据(也可能是我水平有限,哪位童鞋找到了规律一定要告诉我哦)。那么就只有模拟下拉操作了。
想要模拟下拉操作,我们需要用到两个工具,一个是PhatomJs,一个是Selenium。
PhatomJS其实就是一个没有界面的浏览器,最主要的功能是能够读取js加载的页面。
Selenium实质上是一个自动化测试工具,能够模拟用户的一些行为操作,比如下拉网页。
一直有个说法,Python + PhatomJS + Selenium 是爬虫的无敌三件套,基本能够实现所有爬虫需求。
OK,我们分别介绍下他们的使用,然后开始我们的实战。
二、运行环境
我的运行环境如下:
Windows10。
Python版本
Python3.5,推荐使用Anaconda 这个科学计算版本,主要是因为它自带一个包管理工具,可以解决有些包安装错误的问题。去,选择Python3.5版本,然后下载安装。
我使用的是PyCharm,是专门为Python开发的IDE。这是JetBrians的产品,。
三、PhatomJS
PhatomJS是一个WebKit内核的浏览器引擎,它能像浏览器一样(它就是一个浏览器,只不过没有界面)解析网页,以及运行JavaScript脚本。
迄今为止,我们的实战小爬虫只是在模拟http请求,然后获取response,从response中解析HTML代码获得想要的数据。但是,网页中有些数据是用js动态加载的,这样,我们使用使用http请求获得的数据中并不包含js动态加载的内容。比如我在本系列的第一篇博文中请求了一下的网站,本来想用网易云音乐做实战示例的(我的设计师小伙伴儿的另一个需求),不过由于它是由js动态加载的,用不到requests库,所以就先以Unsplash网站为实例了。写完Unsplash网站的爬虫后就开始网易云音乐的实战!
那么,怎么判断一个网站的内容是不是js动态加载的呢?
打开,在页面上点击右键--&View page source。会弹出一个新窗口,在新窗口中搜索你想要爬取的内容,发现搜不到。那就肯定是js动态加载的了。
比如看下图中的选中图片,下面有文字:“影视歌曲|重新演绎经典 听翻唱焕发新生命力”。
我们在View page source页面搜索该内容,发现搜索不到,可见这部分内容是由js动态加载的。
好了,进入正题,来看看PhatomJS如何使用。
2. 安装 PhatomJS
PhatomJS 不能使用conda install 或者pip install 来安装。需要,选择你的系统版本。下载完成的是一个压缩包,解压到你想存放的目录(我放在了“C:Program Files” 目录)。
接下来需要把PhatomJS配置成环境变量,这样就可以直接调用了。
1). 按win+E快捷键打开文件资源管理器“,在左侧的“此电脑”上点击右键,选择“属性”。
2). 在打开的窗口中左侧,点击“高级系统设置”。
3). 在弹出的窗口中点击“环境变量”。
4). 在新窗口中选择“PATH”,在下方点击编辑按钮。
5). 把phatomjs.exe所在的目录添加到path中即可。
这样,安装过程就搞定了。
3. PhatomJS 的使用
在网上搜了一下,没有找到中文的官网文档,只找到了。
3.1 举个栗子
先来一个官网上的例子,PhatomJS执行js文件,输出“Hello, World!”
新建一个js文件,包含下面的代码,然后保存为hello.js。
console.log(&Hello, world!&);
phantom.exit();
#用来终止phtomjs程序
打开cmd命令窗口,进入到hello.js 文件所在目录,执行下面的命令:
phantomjs hello.js
Hello, world!
这个例子虽然方法比较笨,需要先创建一个js文件,然后再去执行。但是演示了PhatomJS的一个很重要的功能,就是执行js代码。我们后面会用到它来执行下拉操作哦。
3.2 再来个栗子
我们使用PhatomJS来请求一个网页,然后把网页截图保存。
创建一个js文件,包含下面的代码,保存为music.js
var page = require(&webpage&).create();
page.open(&/&, function(status) {
console.log("Status: " + status);
if(status === "success") {
page.render(&music.png&);
phantom.exit();
然后使用cmd命令窗口,在music.js文件所在目录,执行下面的命令:
phatomjs music.js
这样会有一个屏幕截图保存在文件所在的文件夹喽。
3.3 其他栗子
还有一些功能就不细细展开了,知道常用的就可以继续咱们的爬虫了。有用到其他功能的童鞋们去官网看看例子。
对了,官网还有许多栗子,奉上链接:。
四、Selenium
Selenium是一个自动化测试框架,广泛的用于自动化测试领域(是不是真的广泛用于自动化测试领域我也不知道,没怎么搞过自动化测试 -_-!,这是我臆测的 = ̄ω ̄=)。因为它能够模拟人工操作,比如能在浏览器中点击按钮、在输入框中输入文本、自动填充表单、还能进行浏览器窗口的切换、对弹出窗口进行操作。也就是说你能手动做的东西,基本都能用它来实现自动化!
自己总结的大白话介绍~,大家凑合看哦。主要是文学水平有限,青春期的时候还想当一个文艺青年,没事儿矫情矫情写点东西,还注重个押韵啥的,学了理工科以后,矫情的东西受不了了,喜欢直接了当的。哎呦,跑偏了,赶紧回归正题!
该框架还支持多种语言:Java、C#、Python、Ruby、PHP、Perl、JavaScript。
当然,我们使用的是面向Python语言的API。
2. 安装 Selenium
可以使用pip install selenium来安装。使用Anaconda3版本的童鞋们,conda install selenium在我的机器上不会下载,未找到原因。但是同样使用pip install selenium安装成功了。通过在命令行里面输入conda list,可以看到已经安装的包。
同时装有Python2.7和Python3.5的童鞋,使用下面的命令来安装。
py -3 -m pip install selenium
3. Selenium 的使用
Selenium支持很多语言的使用,上面也提到了。其他语言的使用我没有接触过,直接看Python语言的使用。官网:。
3.1 同样先来个栗子
因为PhatomJS没有界面,在使用的时候没有直观感受。所以,我们暂时使用Chrome浏览器代替PhatomJS。
首先下载Chrome浏览器驱动:,选择自己的系统版本,然后下载。这是一个压缩包,解压后存到一个目录中,然后把该目录添加到环境变量。因为上面的PhatomJS已经演示过添加环境变量的流程,这里就不赘述了。
在PyCharm中输入下面代码,然后运行看看有什么反应。
from selenium import webdriver
#导入Selenium的webdriver
from mon.keys import Keys
driver = webdriver.Chrome()
#指定使用的浏览器,初始化webdriver
driver.get("http://www.python.org")
#请求网页地址
assert "Python" in driver.title
#看看Python关键字是否在网页title中,如果在则继续,如果不在,程序跳出。
elem = driver.find_element_by_name("q")
#找到name为q的元素,这里是个搜索框
elem.clear()
#清空搜索框中的内容
elem.send_keys("pycon")
#在搜索框中输入pycon
elem.send_keys(Keys.RETURN)
#相当于回车键,提交
assert "No results found." not in driver.page_source
#如果当前页面文本中有“No results found.”则程序跳出
driver.close()
#关闭webdriver
哎呀,其实浏览器的变化流程我都写到上面的代码的注释中了,就不再说一遍了哦。
通过上面的例子,我们可以大概的了解了Selenium都能做什么。个人认为其中比较重要的就是定位,即找到页面中的元素,然后进行相关操作。
导航操作的使用非常简单,完全可以通名字就知道它们是干什么的,不信先给你几个例子瞧瞧:
element = driver.find_element_by_id("passwd-id")
#通过id获取元素
element = driver.find_element_by_name("passwd")
#通过name获取元素
element = driver.find_element_by_xpath("//input[@id=&passwd-id&]")
#通过使用xpath匹配获取元素
下面列出详细的定位方法。有定位一个元素的,也有定位多个元素的。
定位一个元素:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
定位多个元素:
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
通过导航操作,我们就可以在找到想找的元素,然后进行接下来的处理,比如,想在一个输入框中输入数据。看3.1的那个栗子,通过导航,找到了name为p的输入框,然后使用send_keys在输入框中写入数据:
elem.send_keys("pycon")
我们知道了如何在输入框中输入数据,那如果我们碰到了下拉框该怎么办呢?
from selenium.webdriver.support.ui import Select
#导入Select
select = Select(driver.find_element_by_name(&name&))
#通过Select来定义该元素是下拉框
select.select_by_index(index)
#通过下拉元素的位置来选择
select.select_by_visible_text("text")
#通过下拉元素的内容来选择
select.select_by_value(value)
#通过下拉元素的取值来选择
来看一个下拉框的HTML:
&select name="cars"&
&option value ="volvo"&沃尔沃&/option&
&option value ="bmw"&宝马&/option&
&option value="benz"&奔驰&/option&
&option value="audi"&奥迪&/option&
结合上面的例子:
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_name(&cars&))
#找到name为cars的select标签
select.select_by_index(1)
#下拉框选中沃尔沃
select.select_by_visible_text("宝马")
#下拉框选中宝马
select.select_by_value("benz")
#下拉框选中奥迪
嗯...,让我想想还有什么... ...。对了,还有一个操作特别常用,就是点击操作。这个很简单:
elem.click()
在找到的元素后面加上click()就可以了。
3.3 Cookies
我们想要爬取的网站有些可能需要登录,这样就需要在请求网站的时候添加Cookies。
driver.get("") #先请求一个网页
cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’} #设置cookie内容
driver.add_cookie(cookie)
#添加cookie
还有其他的功能,比如拖拽页面的元素、浏览器切换、处理弹出框口等。我就不一一列举了,有需要的小伙伴儿们去看看官网吧。
我们的PhatomJS 和Selenium 已经安装完成,并且了解了他们的使用。
这篇就先到这里吧,下一篇开始改造我们的小爬虫喽。
内容来源:
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信}

我要回帖

更多关于 末日时在做什么轻小说 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信