前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[编程经验] Python中使用selenium进行动态爬虫

[编程经验] Python中使用selenium进行动态爬虫

作者头像
用户1622570
发布2018-09-14 18:34:58
3.8K1
发布2018-09-14 18:34:58
举报
文章被收录于专栏:机器学习和数学

Hello,大家好!停更了这么久,中间发生了很多事情,我的心情也发生了很大的变化,看着每天在增长的粉丝,实在不想就这么放弃了,所以以后我会尽量保持在一周一篇的进度,与大家分享我的学习点滴,希望大家可以继续支持我,我会努力滴!

selenium是一个前端的自动化测试工具,一般不推荐作为爬虫工具,但是为啥我还要给大家说用来做爬虫呢,因为他确实可以用来爬虫,并且思路很直观,原理比较清晰。

1. 安装

selenium安装比较简单,直接用pip就可以安装,打开cmd,输入

pip install selenium

就好了

2. 安装chromedriver

chromedriver是谷歌浏览器的驱动程序,因为我平时用chrome,所以这里只介绍chromedriver。

下载地址:

http://chromedriver.storage.googleapis.com/index.html

这里需要注意的是,chromedriver的版本需要是你安装的Chrome的版本对应起来,Chrome的版本可以在浏览器的右上角找到帮助-关于Google Chrome 查看浏览器的版本。具体的对应规则如下:

chromedriver版本

支持的Chrome版本

v2.40

v66-68

v2.39

v66-68

v2.38

v65-67

v2.37

v64-66

v2.36

v63-65

v2.35

v62-64

v2.34

v61-63

v2.33

v60-62

v2.32

v59-61

v2.31

v58-60

v2.30

v58-60

v2.29

v56-58

v2.28

v55-57

v2.27

v54-56

v2.26

v53-55

v2.25

v53-55

v2.24

v52-54

v2.23

v51-53

v2.22

v49-52

安装完之后,把驱动的安装目录添加到系统Path中就好了,如果不添加,在运行程序的时候就会报错,提示你没有添加到Path中。

3. 开始爬虫

今天要爬取的网址是:https://www.upbit.com/service_center/notice,然后点击翻页按钮,发现url并没有变化,通过F12查看请求的地址变化,可以发现,

https://www.upbit.com/service_center/notice?id=1

这里主要变化的就是后面的id,1,2,3,。。。依次类推。

用selenium爬虫开始前,需要定义好下面内容

代码语言:javascript
复制
# 设置谷歌浏览器的选项,
opt = webdriver.ChromeOptions()
# 将浏览器设置为无头浏览器,即先爬虫时,没有显示的浏览器
opt.set_headless()
# 浏览器设置为谷歌浏览器,并设置为上面设置的选项
browser = webdriver.Chrome(options=opt)

save = []
home = 'https://www.upbit.com/home'
# 创建好浏览器对象后,通过get()方法可以向浏览器发送网址,
# 获取网址信息
browser.get(home)
time.sleep(15)

然后是如何定位html的元素,在selenium中,定位元素的方法有

find_element_by_id(self, id_) find_element_by_name(self, name) find_element_by_class_name(self, name) find_element_by_tag_name(self, name) find_element_by_link_text(self, link_text) find_element_by_partial_link_text(self, link_text) find_element_by_xpath(self, xpath) find_element_by_css_selector(self, css_selector)

其中的id,name等都可以通过浏览器获得,定位元素的目的是为了获取我们想要的信息,然后解析出来保存,通过调用tex方法可以获得元素的文本信息。

下面把整个爬虫的代码,贴出来,供大家参考

代码语言:javascript
复制
from selenium import webdriver
import time
from tqdm import trange
from collections import OrderedDict
import pandas as pd


def stringpro(inputs):
    inputs = str(inputs)
    return inputs.strip().replace("\n", "").replace("\t", "").lstrip().rstrip()


opt = webdriver.ChromeOptions()
opt.set_headless()
browser = webdriver.Chrome(options=opt)

save = []
home = 'https://www.upbit.com/home'
browser.get(home)
time.sleep(15)
for page in trange(500):
    try:
        rows = OrderedDict()
        url = "https://www.upbit.com/" \
              "service_center/notice?id={}".format(page)
        browser.get(url)
        content = browser.find_element_by_class_name(
            name='txtB').text
        title_class = browser.find_element_by_class_name(
            name='titB')
        title = title_class.find_element_by_tag_name(
            'strong').text
        times_str = title_class.find_element_by_tag_name(
            'span').text
        times = times_str.split('|')[0].split(" ")[1:]
        num = times_str.split("|")[1].split(" ")[1]
        rows['title'] = title
        rows['times'] = " ".join(times)
        rows['num'] = num
        rows['content'] = stringpro(content)
        save.append(rows)
        print("{},{}".format(page, rows))
    except Exception as e:
        continue

df = pd.DataFrame(save)
df.to_csv("./datasets/www_upbit_com.csv", index=None)

有问题可以与我交流~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习和数学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档