跟着@斌叔学爬虫~ 以下是课堂笔记~
在编程的世界中,你可以把爬虫理解为一只在互联网上爬行的蜘蛛,遇到你想要的资源时,这只蜘蛛就会把资源去下来。
Demo 简介:
以糗事百科为例子,爬出笑话,不看广告
步骤:
1.要用到一个Python的 Selenium 库
2.它不是Python自带的,需要我们自行安装
3.需要拿到要爬的URL
首先需要分析网页代码,查找我们需要的信息所在的位置。通过Selenium 中的方法匹配到我们要的数据。
再对数据做下载,打印等操作。
会用要循环,函数,对象等知识点。
安装Selenium:
只需要一句命令,进入终端输入 pip install selenium
如果不成功,可以试试以下两句命令(相当于重新安装Python):
brew install python3
pip3 install selenium
可以参考这个链接:https://stackoverflow.com/questions/45998084/how-to-install-selenium-python-on-mac
如果报错:
FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver': 'chromedriver'
解决方法:
在这里 https://sites.google.com/a/chromium.org/chromedriver/home down一份 ChromeDriver 放到指定path里(下文会有介绍)
如果不能登上面的网页,就去斌叔提供的网页下载:
Windows 平台:https://static1.bcjiaoyu.com/chromedriver_win32.zip
Mac 平台:https://static1.bcjiaoyu.com/chromedriver_mac64.zip
macOS系统,就把驱动放在/usr/local/bin 目录下
sudo mv 文件目录 空格 要移动至的目录,然后输入你自己的密码即可
如果你的环境安装成功了,就不需要直接写上地址了!
就可以这样写:webdriver.Chrome()
由于一直没成功,我使用了暴力方法 ∠( ᐛ 」∠)_
直接访问chromedriver的地址!!
像这样webdriver.Chrome('/Users/xixi/Desktop/ly_python/chromedrive)
from selenium import webdriver
#打开谷歌浏览器,并访问百度
browswer = webdriver.Chrome('/Users/xixi/Desktop/ly_python/chromedriver’)#直接把chromedriver的path加了进去
browswer.get('http://wwww.baidu.com/')
运行,就会打开Chrome浏览器,并且打开百度浏览器,搜索 cxy61
import ssl
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
#打开谷歌浏览器,并访问百度
browswer = webdriver.Chrome('/Users/duqiao/bin/chromedriver')
browswer.get('http://wwww.baidu.com/')
#获取浏览器中 name 为 wd 的标签
elem = browswer.find_element_by_name("wd") #利用 find_element_by_name 方法获取了输入框,进行了自动搜索
#搜索 cxy61
elem.send_keys("cxy61")
elem.send_keys(Keys.RETURN)
#打印页面
print(browswer.page_source)
———————
如何打开浏览器的开发者工具
打开开发者工具,Mac 上可以通过 option+command+i 来打开,Windows 上可以通过 f12 打开
开发中遇到的issue :
WebElement' object is not iterable
解决:
原来是打错function 名字了
contents = main_content.find_element_by_class_name('content')
改为
contents = main_content.find_elements_by_class_name('content')
小知识:
main_content 使用 find_elements_by_class_name 方法获取了 class 为 content 的标签
dr.quit() 退出我们打开的浏览器,否则每次都打开一个浏览器,电脑会卡死
上爬虫的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browswer = webdriver.Chrome('/Users/duqiao/bin/chromedriver')
browswer.get('https://www.qiushibaike.com/')
#获取 id 为 content-left 的元素
main_content = browswer.find_element_by_id('content-left')
#获取 class 为 conten 的元素
contents = main_content.find_elements_by_class_name('content')
i = 1
#for 循环
for content in contents:
print(str(i) + '.' + content.text + '\n')
i += 1
#退出
browswer.quit()
小知识:
Python 是一门面向对象的语言,所以我们能很轻松的创建一个类,类就是描述具有相同属性和方法的对象的集合
class 是 Python 的关键字,输入 class,敲击回车,你会发现自动生成了如下代码
Screen Shot 2018-04-03 at 11.36.34 AM.png
我们用 class 创建一个类,后面接你要定义的类名,以冒号结束
class XIXI:
def init() 这个函数比较特殊,我们叫它初始化方法或构造函数,当这个类有实例被创建时,该方法就会被调用
class XIXI:
super(ClassName, self).init() 表示调用父类中的方法,本程序中没有涉及到继承,所以先不用写
还有一点,self 代表这个类的实例,它不是 Python 的关键字,只是我们习惯于这样写,它是必须存在的
封装后的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class XIXI:
def __init__(self):
self.browswer = webdriver.Chrome('/Users/你的名字/bin/chromedriver')
self.browswer.get('https://www.qiushibaike.com/')
def print_content(self):
#获取 id 为 content-left 的元素
main_content = self.browswer.find_element_by_id('content-left')
#获取 class 为 conten 的元素
contents = main_content.find_elements_by_class_name('content')
i = 1
for content in contents:
print(str(i) + '.' + content.text + '\n')
i += 1
self.quit()
def quit(self):
self.browswer.quit()
XIXI().print_content()
运行的效果:
Screen Shot 2018-04-03 at 11.33.07 AM.png
可以成功抓到数据啦~ 如果你要使用以上的代码,请不要忘记换上你的chromedriver所在的地址!
网友评论