python抓取动态网页(爬取网页思路的改变–selenuim的介绍和基本使用在爬虫领域)
优采云 发布时间: 2021-09-11 12:09python抓取动态网页(爬取网页思路的改变–selenuim的介绍和基本使用在爬虫领域)
抓取网页的思路变化-selenuim的介绍和基本使用
在爬虫领域,网页可以分为主要内容全部出现在HTML中的[静态网页]和需要通过执行JavaScript来显示主题内容的[动态网页]。
假设爬虫程序需要爬取:2020中国大学排名
访问网站时,会发现点击第二页、第三页...时,页面部分刷新,URL不会改变。这时候使用[requests]库访问,* *只获取*第一页的数据,后面18页是不可用的。
这时候就需要了解:爬虫、浏览器和WebDriver的关系,可以浏览相关网页,这里不再赘述。 . .
以下是重点:
Selenium 是一个程序。国外大神团队打造的“轮子”本质上是一个成熟稳定的WebDriver程序,并在此基础上提供了丰富的功能。它也是一个开源浏览器自动化项目,提供了一组命令接口。我们可以用它向浏览器发送指令,浏览器会执行特定的操作。网页渲染完成后,会抓取对应的字段。
传送门:(*敏*感*词*下载地址)
温馨提示:开始练习前,请按照Selenium官方文档安装Selenium,并下载相应的浏览器WebDriver。
元素定位方法(如下图1):
以下爬取了本网站所有涉及[校名,如清华大学等]的567所学校。
只需导入两个包。 . .
有效代码少于 30 行。 .
可以自己练习,基础语法,欢迎在评论区留言,有很多注意事项才可以写(看到留言会回复~~)。
简介:
导入selenium库,xlwt库(可选);定义一个函数parselweb,传入两个参数,url和school_info;驱动浏览器,打开url链接,css_selector选择器找到网页页码对应的css元素(如图)2),设置为制造循环(从嵌套的if语句中去掉页面“0”;(调用方法:find_element_by_css_selector(),没有s的元素)嵌套for循环,css_selector选择器遍历页面所有类=“div>.name-cn”,调用text提取文本;(调用方法:find_elements_by_css_selector())school_info调用append () 方法依次添加字符串文本,print() 打印列表元素。
所有代码如下:
from selenium import webdriver
import xlwt
#1.【selenium模块】遥控win10自带的Edge浏览器打开指定网页;
#2.查看页面共19页,撇去数字“0”,开始循环点击网页;
#3.每次点击一个网页页码,则使用【css选择器】定位指定【字段】 并提取出来存入变量 school_info;
#4.【xlwt模块】写入数据
def parselweb(url,school_info):
driver = webdriver.Edge(executable_path='msedgedriver.exe')
driver.get(url)
for i in range(20):
if i == 0:
pass
else:
driver.find_element_by_css_selector(".ant-pagination-item.ant-pagination-item-" + str(i)).click()
text1 = driver.find_elements_by_css_selector("div>.name-cn")
for ii in text1:
school_name_cn = ii.text
school_info.append(school_name_cn)
print(school_info)
print("接下来将数据传入Excel")
return school_info
def xlsbook(school_info):
xls = xlwt.Workbook()
sheet = xls.add_sheet("最好大学排名")
for val in range(len(school_info)):
sheet.write(val,0,school_info[val])
xls.save("d:/zuimeidaxue02.xls")
def main():
school_info = []
url = "https://www.shanghairanking.cn/rankings/bcur/2020"
parselweb(url,school_info)
xlsbook(school_info)
main()
运行后附上结果:
待更新。 . .