赞
踩
更新了!更新了!
想必听完了前两章的你,已经十分了解python爬虫的基本思路,可能你已经编出一个.py文件了
那么今天,也就是在这个selenium系列的终章,我们就来说说如何在pycharm环境下运行你的爬虫程序,以及在此基础上在加以一点润色,离按下shift+F10就能轻轻松松自动爬到大量图片的目标就不远了!!
在IDLE调试好我们的程序后,直接Ctrl+C再Ctrl+V到pycharm中是欠妥的,在运行前还需要一点小准备
在我们准备之前,你还需要新建一个项目(如果已有就不用了)
然后在该项目下创建python文件
现在你就可以把代码复制进入新开页面了!
接下来开始小准备
前面章节我们说了在命令行窗口用pip语句下载python库,但是这个安好的库只能在命令行窗口和python的IDLE运行,而不能直接在pycharm运行
所以我们需要 File-->Settings-->Project xxx(你的项目名字,反正就是 Version Control 下面那个)-->Project Interpreter-->点击“小+号”
最后在弹出界面最上方的搜索框搜索需要的库,再点击左下角的 Install Package 就OK啦!(右侧多选框均不必勾选)
在python文件第一行写如下语句:
# -*- coding:UTF-8 -*-
这指的是一种广泛编码方式,拥有对应的推荐程序格式和解析文本方式
总之,听说添加了这条语句的代码都会变幸运
关于pychram还有一些很方便的快捷键,比如常用的有
- Ctrl+Alt+L :可以自动整理程序格式!!!(比如给你自动加空格)
- Alt+1 :把左侧文件栏收起(再按则放出)
- shift+F10 :运行Run上一次运行的程序
最后还有一点注意
- import time
- time.sleep(2)
适时加入延迟!
适时加入延迟!
适时加入延迟!
先前我们在IDLE编程时是一句句输入,相当于自带了延迟
但是在pycharm的爬虫过程中,如果进入一个新界面不加入延迟,网站就来不及完成加载,导致selenium库找不到元素,就会报错!!
在 requests 库中,我们get网站时可以通过修改 headers 和 proxies 来修改头和ip,达到如入无人之境的防反爬效果(后面可能会写一写这个)
而在selenium库中,程序模拟浏览器访问网站,通常困扰我们的不是headers被人拦截,而是需要登录,当然,还有头顶那行小字(对于咱们小项目,ip不换也影响不大)
先说怎么去掉头顶小字
其实就博主经验而言,小字不去除也影响不大
但是还是去掉比较好
- from selenium.webdriver import Chrome # 谷歌浏览器
- from selenium.webdriver import ChromeOptions
- option = ChromeOptions()
- option.add_experimental_option('excludeSwitches', ['enable-automation'])
- driver = Chrome(options=option)
像这样创建 driver ,小字应该就被去掉了
这里分享两种登录方法
1.直接自动输入法
机智的小伙伴应该已经想过,既然selenium库能模拟浏览器,那么能不能模拟键盘鼠标操作呢
确实是可以的,在selenium库中可以对获取到的网络元素做click或者send_keys
下面还是以花瓣网为例
这里我们先试试找到登录健,然后点击它
- button = driver.find_element_by_xpath('//*[@class="login bounce btn rbtn"]')
- button.click()
后面的操作思路是一样的,下面是完整的登录过程
- from selenium.webdriver.common.keys import Keys
- driver.find_element_by_xpath('//*[@class="login bounce btn rbtn"]').click() # 点击登录
- button1 = driver.find_element_by_xpath('//*[@class="login"]//*[@class="mail-login"]/input[2]')
- button1.send_keys('1372593xxxx') # 输入你的账号
- button2 = driver.find_element_by_xpath('//*[@class="login"]//*[@class="mail-login"]/input[3]')
- button2.send_keys('xxxxxx') # 输入你的密码
- driver.find_element_by_xpath('//*[@class="login"]//*[@class="btn btn18 rbtn"]').send_keys(Keys.RETURN) # 按回车,登录成功
成功登录!
注意:
2.cookies方法
有了解一点requests库爬虫的小伙伴可能知道在修改headers防反爬时,有一个东西叫cookies
这个东西简单来说,就是一个表示用户登录与否状态的参数
在网站中我们也可以查看(先不要直接复制!)
selenium库很棒的提供了可操作cookies的函数:
- driver.get_cookies() :以列表格式读取网站上的cookies
- driver.add_cookie() :向网站以单个元素添加到网站上
- driver.delete_all_cookies() :把当前网站上的现有所有cookies删除
于是我们可以进入网站,获取它的cookies保存成文件;然后删掉所有cookies,再读取我们创建的cookies文件添加到网站中
- import json # 一个自带的库
- with open('C:/Users/dell/Desktop/cookies.txt','w') as f: # 这是博主的文件路径
- f.write(json.dumps(driver.get_cookies())) # 获取cookies
- driver.delete_all_cookies() # 删掉网站现有cookies
- with open('C:/Users/dell/Desktop/cookies.txt','r') as f:
- cookies_list = json.load(f)
- for cookie in cookies_list:
- if 'expiry' in cookie:
- del cookie['expiry']
- driver.add_cookie(cookie) # 添加cookies
注意:
在selenium库里自动翻页比较简单,像前面登录那样 找元素-->点击元素 就可以了
在此之前你还需要一个拉到底部的操作
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
注意:括号内第二个参数就表示当前网页的高度
上面那个拉到底部的操作非常神奇啊,但现在不是所有网站都有底的(比如某宝)
这时就需要我们慢慢地向下拉动网页
博主的思路是设定一个时间段让它下拉,到时间就停(还是花瓣网)
- bottom = driver.find_element_by_id('page') # 覆盖整个网页那个元素
- t0 = time.time()
- height = 300 # 初次下拉值
- dr_time = 40 # 想要爬取的时间
- while Elem.height <= bottom.size['height']:
- driver.execute_script('window.scrollTo(0, %d)' % height)
- time.sleep(2)
- Elem.height = Elem.height + 1000
- t1 = time.time()
- if (t1 - t0) > dr_time:
- break
注意:
到本章为止,我们就要向基于selenium库的python图片爬虫画上一个完满的句号啦(但是python爬虫之路还远远没有结束!)后续大概会更新关于requests库制作ip池的内容,还请小伙伴们请多多点赞和关注,你的每一点鼓励或指正都对我很重要!!!
完整的爬取花瓣网图片代码我会放在下一章,然后还会附上一个爬取jd商品信息的案例。喜欢的朋友请追更~我们下期见啦!
(往期内容可在专栏查看~)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。