美文网首页我爱编程
Python 爬虫小Demo

Python 爬虫小Demo

作者: 小小小小饼 | 来源:发表于2018-04-03 11:38 被阅读181次

跟着@斌叔学爬虫~ 以下是课堂笔记~

在编程的世界中,你可以把爬虫理解为一只在互联网上爬行的蜘蛛,遇到你想要的资源时,这只蜘蛛就会把资源去下来。

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所在的地址!

相关文章

网友评论

    本文标题:Python 爬虫小Demo

    本文链接:https://www.haomeiwen.com/subject/mnsqhftx.html