动态网页抓取( 爬取一个动态网页的数据(一)--Selenium )

优采云 发布时间: 2021-12-29 16:15

  动态网页抓取(

爬取一个动态网页的数据(一)--Selenium

)

  Python+Selenium 动态网页信息抓取

  一、Selenium (一)Selenium 介绍

  Selenium 是一个 Web 自动化测试工具。它最初是为自动化网站测试而开发的。类型就像我们用来玩游戏的按钮向导。可根据指定指令自动运行。不同的是,Selenium 可以直接在浏览器上运行。支持所有主流浏览器(包括PhantomJS等非接口浏览器)。

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

  Selenium 没有浏览器,不支持浏览器的功能。需要配合第三方浏览器使用。但是我们有时需要让它嵌入到代码中运行,所以我们可以使用一个叫做 PhantomJS 的工具来代替真正的浏览器。

  二、自动填写百度网页查询关键词,完成自动搜索

  1.查看百度源码中搜索框的id和搜索按钮的id

  

  2.获取百度网页

  from selenium import webdriver

driver = webdriver.Firefox(executable_path=r'F:\browserdriver\geckodriver-v0.30.0-win64\geckodriver.exe')

driver.get("https://www.baidu.com/")

  如果正在运行,此时会打开百度的起始页

  

  3.填写搜索框

  p_input = driver.find_element_by_id('kw')

print(p_input)

print(p_input.location)

print(p_input.size)

print(p_input.send_keys('一只特立独行的猪'))

print(p_input.text)

  4.模拟点击

  使用另一个输入,即按钮的点击事件;或者表单的提交事件

  p_btn = driver.find_element_by_id('su')

  p_btn.click()

  三、 抓取动态网页的数据(一)网站链接

  (二)分析网页

  1. 抓取网页元素

   含有quote类的标签即为所要的标签

text类名言,author为作者,tags为标签

  

  2.按钮属性

  爬取一个页面后,需要翻页,即点击页面按钮。

  可以发现Next按钮只有href属性,无法定位。而且第一页只有下一页按钮,后面的页面有上一页和下一页按钮,xpath无法定位,其子元素span(即箭头)在属性aria-hidden中第一页它是独一无二的。aria-hidden 属性存在于后续页面中,但 Next 的箭头始终是最后一个。

  因此,您可以通过找到最后一个带有 aria-hidden 属性的 span 标签来点击跳转到下一页:

  

  (3)网站页面

  点击Nest,可以发现网站有10页

  

  (三)代码实现

  1.代码

  import time

import csv

from bs4 import BeautifulSoup as bs

from selenium import webdriver

driver = webdriver.Firefox(executable_path=r'F:\browserdriver\geckodriver-v0.30.0-win64\geckodriver.exe')

# 名言所在网站

driver.get("http://quotes.toscrape.com/js/")

# 所有数据

subjects = []

# 单个数据

subject=[]

#定义csv表头

quote_head=['名言','作者','标签']

#csv文件的路径和名字

quote_path='名人名言.csv'

#存放内容的列表

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)

n = 10

for i in range(0, n):

driver.find_elements_by_class_name("quote")

res_list=driver.find_elements_by_class_name("quote")

# 分离出需要的内容

for tmp in res_list:

saying = tmp.find_element_by_class_name("text").text

author =tmp.find_element_by_class_name("author").text

tags =tmp.find_element_by_class_name("tags").text

subject=[]

subject.append(saying)

subject.append(author)

subject.append(tags)

print(subject)

subjects.append(subject)

subject=[]

write_csv(quote_head,subjects,quote_path)

print('成功爬取第' + str(i + 1) + '页')

if i == n-1:

break

driver.find_elements_by_css_selector('[aria-hidden]')[-1].click()

time.sleep(2)

driver.close()

  2.保存的爬取结果

  

  表中有100条信息

  

  四、 爬取京东网站(一) 爬取网站)上感兴趣的书籍信息

  京东:

  (二)网络分析

  1.查看网站首页、输入框和搜索按钮

  

  2.图书展示列表,J_goodsList下

  

  3.标签一一对应

  每本书都有一个li标签

  有很多 li 标签

  

  4.li中的具体内容

  

  (1)价格

  

  (2)书名

  

  (3)按

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线