爬取洛谷题目名及对应题号
这个实例比较简单,找了好久才找到了一个不用登录验证就可爬的oj,天不亡我呜呜呜,太快乐了。打开洛谷的主页,进入题库,通过观察链接的变化可以发现。当我们点击下一页时,链接中只有page后的数字发生了变化,因此我们可以得到链接变化的规律,所以可以通过自己构造出相应的链接访问对应的网页。一页有五十个题目,我们这里试着爬取10页,也就是五百个题目。我们查看网页源代码,搜索一下“超级玛丽游戏”这个名词,可以找到他所处位置在一个li标签包括的a标签中。因此我们可以尝试获取所有的li标签和a标签,并且试着分析一下有没有其他东西在a标签中。结果我们发现只有题目名在a标签中,那我们就获取到所有的li标签,然后取出其中的字符串,即可获取题目名和对应的题号。
代码如下:
import requests
from bs4 import BeautifulSoup
def getHTMLText(url):
try:
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)
return response.text
except:
return ''
def parseHTML(html):
qList = []
soup = BeautifulSoup(html, 'html.parser')
try:
li = soup.find_all('li')
for i in range(len(li)):
temp = li[i].get_text()
temp = temp.split('\xa0')
qList.append(temp)
except:
pass
return qList
def main():
base_url = 'https://www.luogu.com.cn/problem/list'
qList = []
for i in range(10):
url = base_url + '?page=' + str(i + 1)
html = getHTMLText(url)
q = parseHTML(html)
qList += q
for q in qList:
print(q)
main()

浙公网安备 33010602011771号