使用selenium爬取网站动态数据

处理页面动态加载的爬取

selenium

selenium是python的一个第三方库,可以实现让浏览器完成自动化的操作,比如说点击按钮拖动滚轮等

  • 环境搭建:
    • 安装:pip install selenium
    • 获取浏览器的驱动程序:下载地址http://chromedriver.storage.googleapis.com/index.html
    • 驱动与浏览器版本对应:https://blog.csdn.net/ezreal_tao/article/details/80808729
      设置chorme浏览器无界面模式:
  • 编码流程:
from selenium import  webdriver
import time
# 创建一个浏览器对象 executable_path:驱动路径
bro = webdriver.Chrome(executable_path='./chromedriver')

# get方法可以指定一个url,让浏览器进行请求
bro.get('https://www.baidu.com')

# 让浏览器进行指定词条搜索
'''
#使用下面的方法,查找指定的元素进行操作即可
    find_element_by_id            根据id找节点
    find_elements_by_name         根据name找
    find_elements_by_xpath        根据xpath查找
    find_elements_by_tag_name     根据标签名找
    find_elements_by_class_name   根据class名字查找
'''
text = bro.find_element_by_id('kw')
text.send_keys('人民币') # send_keys表示向文本框中录入指定内容

time.sleep(3)
button = bro.find_element_by_id('su')
button.click()# click表示的是点击操作
time.sleep(5)
bro.quit()

phantomJs

phantomJs是一个无界面的浏览器,其自动化流程与上述操作谷歌自动化流程是一模一样的

from selenium import webdrvier

使用selenium爬取豆瓣电影搞笑排行榜动态数据

from selenium import webdriver
import time
from lxml import etree
bro = webdriver.Chrome('./chromedriver')
url = 'https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&type=24&interval_id=100:90&action='
bro.get(url)

# 等待五秒页面加载完毕
time.sleep(5)

# 重复20次使用页面滚轮
for i in range(20):
    time.sleep(2)
    bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')

# 获取页面源代码,可以使用三种解析方式进行解析,这里使用xpath解析数据
text = bro.page_source
tree = etree.HTML(text)
div_list = tree.xpath('//div[@class="movie-info"]')
f = open('豆瓣喜剧电影排行榜.txt','w',encoding='utf-8')
count = 0
for div in div_list:
    # 获取电影具体数据,并进行持久化存储
    try:
        name = div.xpath('./div[@class="movie-name"]/span/a/text()')[0]
        link = div.xpath('./div[@class="movie-name"]/span/a/@href')[0]
        man = div.xpath('./div[@class="movie-crew"]/text()')[0]
        country = div.xpath('./div[@class="movie-misc"]/text()')[0]
        num = div.xpath('./div[@class="movie-rating"]/span[2]/text()')[0]
    except IndexError:
        continue

    f.write('电影名:'+name+'\n链接'+link+'\n'+'导演:'+man+'\n国家:'+country+'\n评分:'+num+'\n-----------------------------\n\n\n')
    print('写入成功:',name)
    count += 1
print('爬取完毕,共抓取%s跳数据'%count)
f.close()
time.sleep(5)
bro.quit()

猜你喜欢

转载自www.cnblogs.com/wualin/p/10257527.html