编写Python爬虫程序,爬取地址: https://www.luogu.com.cn/contest/68651#scoreboard中的比赛榜单, 读取《用户信息.xls文件》,如果用户信息中的账号不在榜单中则排名填-1,如果用户在榜单中则爬取用户的排名和题目通过情况(例:A题通过则填AC,否则留空)本次爬虫排行榜数据是异步请求获取!
时间: 2024-02-29 11:54:59 浏览: 95
爬虫代码,数据集寻找加自动分类,训练集,测试集自动生成!下载就可用,python
好的,这个问题需要用到 requests 库和 BeautifulSoup 库来实现网页爬取和数据解析。同时需要用到 pandas 库来读取和写入 Excel 文件。以下是代码实现:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 爬取榜单数据
url = 'https://www.luogu.com.cn/contest/68651/scoreboard/ajax?_='
headers = {
'Referer': 'https://www.luogu.com.cn/contest/68651',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get(url, headers=headers)
data = res.json()
# 解析榜单数据
ranklist = []
for item in data['currentData']:
ranklist.append({
'rank': item['rank'],
'username': item['user_name'],
'solved': item['solved'],
'penalty': item['penalty']
})
# 读取用户信息文件
user_df = pd.read_excel('用户信息.xls')
# 处理用户排名和题目通过情况
for index, row in user_df.iterrows():
username = row['账号']
found = False
for item in ranklist:
if item['username'] == username:
user_df.at[index, '排名'] = item['rank']
user_df.at[index, 'A'] = 'AC' if item['solved'].find('A') != -1 else ''
user_df.at[index, 'B'] = 'AC' if item['solved'].find('B') != -1 else ''
user_df.at[index, 'C'] = 'AC' if item['solved'].find('C') != -1 else ''
user_df.at[index, 'D'] = 'AC' if item['solved'].find('D') != -1 else ''
user_df.at[index, 'E'] = 'AC' if item['solved'].find('E') != -1 else ''
user_df.at[index, 'F'] = 'AC' if item['solved'].find('F') != -1 else ''
user_df.at[index, 'G'] = 'AC' if item['solved'].find('G') != -1 else ''
user_df.at[index, 'H'] = 'AC' if item['solved'].find('H') != -1 else ''
found = True
break
if not found:
user_df.at[index, '排名'] = -1
# 写入用户信息文件
user_df.to_excel('用户信息.xls', index=False)
```
需要注意的是,这个爬虫程序只能在有权限的情况下使用,否则可能会涉及违法操作。
阅读全文