目标网页
我们对爬虫的使用,肯定是少不了网页的支持啦,这次我们对
2022世界大学学术排名https://www.shanghairanking.cn/rankings/arwu/2022
进行大学排名数据的爬取并且存储进excel,但是这次不细讲爬虫而是只讲selenium的简单使用,所以不对数据进行清洗降噪了
使用的库
首先你得安装bs4、selenium、pandas、time
你可能现在有疑问了,为什么要用pandas,我只能说简单数据简单处理
这些库自行安装不细讲
学python前你得要会pip
谷歌驱动程序的安装位置
下载谷歌驱动去网上找网址,位置我放在了
下一页点击事件
主题来了,直接上代码,不过我们要有思路先才能写代码
我们现在准备对这几行数据进行爬取,并且要爬取在排行榜上的所有高校
我们在此就先查看一下他的源码
我们了解了这些数据全在"tbody"下面,这就好办了
我们把这一页的数据爬取下来先放进一个数组里面先
但是做这些还必须先启动谷歌才行
启动谷歌程序
from bs4 import BeautifulSoupfrom selenium import webdriver
import pandas as pd
import bs4
import time
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True) # option是让谷歌一直开着,而不是只打开一下子就关掉
url = "https://www.shanghairanking.cn/rankings/arwu/2022" # 定义好链接
browser = webdriver.Chrome(options=option) # 启动谷歌浏览器
browser.get(url) #连接
ulist = [] # 先创建一个数组
检索数据取出放进数组里面def getData():
html = browser.page_source #获取全部网页信息
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find('tbody').children: # 找到tbody的子节点
if isinstance(tr, bs4.element.Tag): # 判断tr是否属于子节点中
tds = tr('td')
ulist.append([tds[0].text.strip(), tds[1].text.strip(), tds[2].text.strip(), tds[3].text.strip(),tds[4].text.strip()]) # 获取文本,清空空格
目前获取的也只是一页的数据,我们要获取全部数据
这里有34页,我们想要全部数据就必须要让页面进行跳转,让他自动跳转后获取当前页面我们想要的所有数据,再次查看源代码
这里没有链接,那就是说这个就是一个选项卡,那下面的代码就简单了
先定义页数 flag=1
while flag <= 34: # 循环页数 getData() #每次循环都要调用一次定义的函数 time.sleep(5) #让每个页面都停留五秒再进行点击跳转,让getData函数把数据全爬取完
next_page = browser.find_element_by_css_selector('li.ant-pagination-next>a') #selenium的类选择器,找到a标签然后点击跳转
next_page.click() # 点击下一页,selenium内置的点击事件
flag += 1 #循环完加一
数据存储处理
老规矩,定义函数
def dataFarm(unfo): school = ["排名", "学校名称", "国家/地区", "国家/地区排名", "总分"] chckout = pd.DataFrame(unfo, columns=school)
chckout.to_excel("D:/desktop/大学排名数据.xlsx", index=False)
print("爬取成功!")
都不用try except,因为数据简单,代码少,懒得搞了
总体的代码结尾处记得调用一下
dataFarm(ulist)