网页信息抓取软件(Selenium实验通过Selenium爬取网页,在实现过程中的过程)

优采云 发布时间: 2021-12-18 20:10

  网页信息抓取软件(Selenium实验通过Selenium爬取网页,在实现过程中的过程)

  文章内容

  1、关于硒

  1、Selenium 介绍:Selenium 是一个 Web 自动化测试工具,最初是为 网站 自动化测试而开发的。类型就像我们用来玩游戏的按钮向导。可根据指定指令自动运行。Selenium 可以直接在浏览器上运行,它支持所有主流浏览器(包括 PhantomJS 这些无界面浏览器)。根据我们的说明,它可以让浏览器自动加载页面,获取所需的数据,甚至可以对页面进行截图,或者判断是否对网站进行了某些操作。

  2、使用命令 conda install selenium 安装 selenium

  

  3、安装驱动,不同浏览器驱动不同

  我以火狐浏览器为例,安装过程可以参考:驱动安装

  4、测试驱动安装成功

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

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

  

  2、网页自动化测试

  1、在百度浏览器首页源码中查看搜索框id和搜索按钮id

  

  2、填写搜索框

  p_input = driver.find_element_by_id('kw')

print(p_input)

print(p_input.location)

print(p_input.size)

print(p_input.send_keys('an_ning'))

print(p_input.text)

  

  其中location是元素的位置,size是元素的大小,send_keys是传递给元素的值。这里,我们传入python后,搜索会自动展开

  3、模拟点击,通过使用另一个input来实现,也就是按钮的点击事件;或者表单的提交事件

  p_btn = driver.find_element_by_id('su')

p_btn.click()

  

  3、动态网页数据爬取

  1、 首先分析需要爬取的元素:收录quote类型的标签就是想要的标签;文本类型引用,作者是作者,标签是标签

  (爬取 网站:)

  

  2、可以看到总共有10页

  

  3、实现代码

  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()

  4、运行结果

  

  

  4、在京东上爬取感兴趣的书籍信息网站

  1、在网站首页的开发者工具中勾选网站的搜索框和搜索按钮id(爬网:)

  

  2、如你所见,J_goodlist 是一个书籍列表

  

  3、 li标签中单本书的信息,其中p-img为书的图片,p-name为书名,p-price为书价

  

  4、翻页

  

  5、 找到自己需要的信息后,就可以实现代码爬取数据了

  # -*- coding: utf-8 -*-

"""

Created on Wed Dec 15 10:46:31 2021

@author: 861517387368

"""

import time

import csv

from bs4 import BeautifulSoup as bs

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import time

from lxml import etree

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

# 京东所在网站

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

# 输入需要查找的关键字

p_input = driver.find_element_by_id('key')

p_input.send_keys('*敏*感*词*小说') # 找到输入框输入

time.sleep(1)

# 点击搜素按钮

button=driver.find_element_by_class_name("button").click()

time.sleep(1)

all_book_info = []

num=200

head=['书名', '价格', '作者', '出版社']

#csv文件的路径和名字

path='*敏*感*词*小说.csv'

def write_csv(head,all_book_info,path):

with open(path, 'w', newline='',encoding='utf-8') as file:

fileWriter =csv.writer(file)

fileWriter.writerow(head)

fileWriter.writerows(all_book_info)

# 爬取一页

def get_onePage_info(web,num):

driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')

time.sleep(2)

page_text =driver.page_source

# with open('3-.html', 'w', encoding='utf-8')as fp:

# fp.write(page_text)

# 进行解析

tree = etree.HTML(page_text)

li_list = tree.xpath('//li[contains(@class,"gl-item")]')

for li in li_list:

num=num-1

book_infos = []

book_name = ''.join(li.xpath('.//div[@class="p-name"]/a/em/text()')) # 书名

book_infos.append(book_name)

price = '¥' + li.xpath('.//div[@class="p-price"]/strong/i/text()')[0] # 价格

book_infos.append(price)

author_span = li.xpath('.//span[@class="p-bi-name"]/a/text()')

if len(author_span) > 0: # 作者

author = author_span[0]

else:

author = '无'

book_infos.append(author)

store_span = li.xpath('.//span[@class="p-bi-store"]/a[1]/text()') # 出版社

if len(store_span) > 0:

store = store_span[0]

else:

store = '无'

book_infos.append(store)

all_book_info.append(book_infos)

if num==0:

break

return num

while num!=0:

num=get_onePage_info(driver,num)

driver.find_element_by_class_name('pn-next').click() # 点击下一页

time.sleep(2)

write_csv(head,all_book_info,path)

driver.close()

  6、运行结果

  

  

  5、总结

  本次实验使用Selenium抓取网页,在实现过程中了解网页抓取的过程,以促进自身知识的巩固。同时,网页学习的爬取在我们平时的信息和工作中也具有很大的现实意义。它可以帮助我们找到我们需要的信息。

  参考:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线