Python+Selenium动态网页的信息爬取

一、Selenium

1、Selenium简介

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。

Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。

Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。

2、安装环境

(1)要开始使用selenium,需要安装一些依赖

pip install selenium

(2)安装驱动

要使用selenium去调用浏览器,还需要一个驱动,不同浏览器的webdriver需要独立安装
各浏览器下载地址:selenium官网驱动下载

二、自动化测试

测试一下是否安装成功

from selenium import webdriver
driver=webdriver.Chrome('D:\\py\\chromedriver_win32\\chromedriver.exe')
#进入网页
driver.get("https://www.baidu.com/")

可以看到成功运行谷歌浏览器
在这里插入图片描述

三、爬取名言

from bs4 import BeautifulSoup as bs
from selenium import webdriver
import csv
from selenium.webdriver.chrome.options import Options
driver=webdriver.Chrome('D:\\py\\chromedriver_win32\\chromedriver.exe')
driver.get('http://quotes.toscrape.com/js/')

定义csv表头和文件路径,以及存放内容的列表

#定义csv表头
quote_head=['名言','作者']
#csv文件的路径和名字
quote_path='..\\source\\mingyan_csv.csv'
#存放内容的列表
quote_content=[]

进入开发者模式,定位名言的位置,观察名言的位置
在这里插入图片描述
爬取信息并存入

def write_csv(csv_head,csv_content,csv_path):
    with open(csv_path, 'w', newline='',encoding='utf-8') as file:
        fileWriter =csv.writer(file)
        fileWriter.writerow(csv_head)
        fileWriter.writerows(csv_content)
        print('爬取信息成功')
        quote=driver.find_elements_by_class_name("quote")
#将要收集的信息放在quote_content里
for i in tqdm(range(len(quote))):    
    quote_text=quote[i].find_element_by_class_name("text")
    quote_author=quote[i].find_element_by_class_name("author")
    temp=[]
    temp.append(quote_text.text)
    temp.append(quote_author.text)
    quote_content.append(temp)
write_csv(quote_head,quote_content,quote_path)

爬取成功
在这里插入图片描述

四、爬取淘宝商品信息

导入包并进入淘宝首页

from selenium import webdriver
import time
import csv
driver=webdriver.Chrome('D:\\py\\chromedriver_win32\\chromedriver.exe')
driver.get("https://www.taobao.com/")

定义存放爬取信息的路径和存放内容的列表以及爬取数量

#定义存放图书信息的列表
goods_info_list=[]
#爬取200本
goods_num=200
#定义表头
goods_head=['价格','名字','链接']
#csv文件的路径和名字
goods_path='..\\source\\goods.csv'

进入开发者模式,定位搜索框,可以看到搜索框的id为key,获取按钮输入信息
在这里插入图片描述
获取输入框并输入信息

#向输入框里输入薯片
p_input = driver.find_element_by_id("key")
p_input.send_keys('薯片')

获取商品价格、名称、链接的函数

#获取商品价格、名称、链接
def get_prince_and_name(goods):
    #直接用css定位元素
    #获取价格
    goods_price=goods.find_element_by_css_selector('div.p-price')
    #获取元素
    goods_name=goods.find_element_by_css_selector('div.p-name')
    #获取链接
    goods_herf=goods.find_element_by_css_selector('div.p-img>a').get_property('href')
    return goods_price,goods_name,goods_herf

定义滑动到页面底部函数,滑动到页面底部会刷出下一页

def  drop_down(web_driver):
    #将滚动条调整至页面底部
    web_driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')

定义爬取一页的函数

#获取爬取一页
def crawl_a_page(web_driver,goods_num):
    #获取图书列表
    drop_down(web_driver)
    goods_list=web_driver.find_elements_by_css_selector('div#J_goodsList>ul>li')
    #获取一个图书的价格、名字、链接
    for i in tqdm(range(len(goods_list))):
        goods_num-=1
        goods_price,goods_name,goods_herf=get_prince_and_name(goods_list[i])
        goods=[]
        goods.append(goods_price.text)
        goods.append(goods_name.text)
        goods.append(goods_herf)
        goods_info_list.append(goods)
        if goods_num==0:
            break
    return goods_num

运行结果
在这里插入图片描述

五、总结

Selenium是一系列基于Web的自动化工具,通过本次实验对其有了进一步的了解,在网上学习后感觉过程也不是很难。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值