参考教材实例20,编写Python爬虫程序,爬取地址: https://www.luogu.com.cn/contest/68651#scoreboard中的比赛榜单, 读取《用户信息.xls文件》,如果用户信息中的账号不在榜单中则排名填-1,如果用户在榜单中则爬取用户的排名和题目通过情况(例:A题通过则填AC,否则留空)
时间: 2024-02-29 08:54:55 浏览: 70
好的,以下是完整的示例代码:
```
import requests
from bs4 import BeautifulSoup
import xlrd
import xlwt
# 读取用户信息
book = xlrd.open_workbook("用户信息.xls")
sheet = book.sheet_by_index(0)
users = []
for i in range(1, sheet.nrows):
users.append(sheet.cell_value(i, 0))
# 发送请求,获取比赛榜单页面
url = "https://www.luogu.com.cn/contest/68651#scoreboard"
response = requests.get(url)
html = response.text
# 解析HTML页面,获取比赛榜单中的参赛选手信息
soup = BeautifulSoup(html, "html.parser")
table = soup.find_all("table")[0]
rows = table.tbody.find_all("tr")
# 遍历所有用户,判断其是否在比赛榜单中
for user in users:
found = False
rank = -1
acs = [""] * 6
for row in rows:
cols = row.find_all("td")
if cols[1].a.text.strip() == user:
found = True
rank = cols[0].text.strip()
for i in range(6):
if cols[i + 6].text.strip() != "":
acs[i] = "AC"
break
if not found:
rank = -1
# 将用户信息写入新的Excel文件中
book = xlwt.Workbook()
sheet = book.add_sheet("Sheet1")
sheet.write(0, 0, "账号")
sheet.write(0, 1, "排名")
sheet.write(0, 2, "A")
sheet.write(0, 3, "B")
sheet.write(0, 4, "C")
sheet.write(0, 5, "D")
sheet.write(0, 6, "E")
sheet.write(0, 7, "F")
for i in range(len(users)):
sheet.write(i + 1, 0, users[i])
if users[i] == user:
sheet.write(i + 1, 1, rank)
sheet.write(i + 1, 2, acs[0])
sheet.write(i + 1, 3, acs[1])
sheet.write(i + 1, 4, acs[2])
sheet.write(i + 1, 5, acs[3])
sheet.write(i + 1, 6, acs[4])
sheet.write(i + 1, 7, acs[5])
else:
sheet.write(i + 1, 1, -1)
book.save("用户信息(更新).xls")
```
注意,示例代码中假设用户信息的第一列是账号信息,比赛榜单中第二列也是账号信息。如果实际情况不一样,请修改代码中对应的索引值。此外,示例代码中默认比赛中有6道题目,如果实际情况不同,请修改代码中对应的部分。
阅读全文