python-待更新
1.基础版
import requests
from bs4 import BeautifulSoup
allUniv = []
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = 'utf-8'
return r.text
except:
return ""
def fillUnivList(soup):
data = soup.find_all('tr')
for tr in data:
ltd = tr.find_all('td')
if len(ltd) == 0:
continue
singleUniv = [td.text.strip() for td in ltd]
allUniv.append(singleUniv)
def printUnivList(num):
print("{:^8}{:^32}{:^8}{:^8}{:^8}{:^32}".format("排名", "学校名称","省市", "类型", "总分","办学层次"))
for i in range(num):
u = allUniv[i]
print("{:^8}{:^32}{:^8}{:^8}{:^8}{:^32}".format(u[0], u[1], u[2], u[3],u[4],u[5]))
def write_to_txt(data, filename='university_ranking.txt'):
# 打开文件以写入模式
with open(filename, 'w', encoding='utf-8') as f:
# 写入表头
headers = ["排名", "学校名称", "省市", "类型", "总分", "办学层次"]
f.write('\t'.join(headers) + '\n') # 使用制表符作为分隔符
# 写入数据
for univ in data:
f.write('\t'.join(univ) + '\n') # 使用制表符作为分隔符
print(f"数据已成功写入文本文件:{filename}")
def main():
url = 'https://www.shanghairanking.cn/rankings/bcur/2024'
html = getHTMLText(url)
soup = BeautifulSoup(html, "html.parser")
fillUnivList(soup)
printUnivList(30)
write_to_txt(allUniv) # 调用write函数,并传入allUniv列表
if __name__ == "__main__":
main()
2.升级版
from bs4 import BeautifulSoup
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
# 配置Chrome浏览器选项
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True) # 让浏览器在后台运行
# 定义URL
url = "https://www.shanghairanking.cn/rankings/bcur/2024"
# 初始化浏览器并访问URL
browser = webdriver.Chrome(options=option)
browser.get(url)
# 初始化列表来存储所有页面的数据
all_data = []
def getData():
global all_data # 使用全局变量来存储数据
html = browser.page_source # 获取当前页面的HTML
soup = BeautifulSoup(html, "html.parser")
tbody = soup.find('tbody') # 查找tbody元素
if tbody: # 确保tbody存在
for tr in tbody.find_all('tr'): # 查找所有的tr元素
if tr.find('td'): # 确保tr元素包含td元素
tds = tr.find_all('td') # 查找所有的td元素
# 提取文本并去除空格,然后将它们添加到all_data列表中
all_data.append([td.get_text(strip=True) for td in tds])
# 爬取数据的函数
def crawl_pages(max_pages):
current_page = 1 # 当前页码初始化为1
while current_page <= max_pages: # 循环爬取指定数量的页面
getData() # 获取当前页面的数据
time.sleep(3) # 等待3秒
# 检查是否有下一页按钮,并点击它(如果有的话)
try:
next_page = browser.find_element(By.CSS_SELECTOR, 'li.ant-pagination-next>a')
next_page.click()
current_page += 1 # 成功点击后,增加当前页码
except:
break # 如果没有下一页按钮,则跳出循环
# 爬取20页数据
crawl_pages(20)
# 将数据存储到txt文件
def write_to_txt(data, filename='中国大学排名.txt'):
with open(filename, 'w', encoding='utf-8') as f:
headers = ["排名", "学校名称", "省市", "类型", "总分"] # 根据实际网页内容调整表头
f.write('\t'.join(headers) + '\n') # 写入表头
for row in data:
f.write('\t'.join(row) + '\n') # 写入每一行数据
# 调用函数将数据写入txt文件
write_to_txt(all_data)
# 关闭浏览器
browser.quit()
5-16
5-23
附件1:123家有信贷记录企业的相关数据 附件2:302家无信贷记录企业的相关数据 附件3:银行贷款年利率与客户流失率关系的统计数据 中小微企业的信贷决策
版权声明:
作者:夜阑
链接:http://yelan.xyz/index.php/2024/04/25/python-%e7%ac%ac%e4%b9%9d%e8%8a%82%e8%af%be/
来源:夜阑的小站
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
夜阑
试试能不能评论