Python中如何从存储网页链接的列表里随机抽取单个元素?
问题修复方案
核心问题原因
- 你在循环中错误地把存储链接的列表变量
articles直接赋值为单条链接字符串,覆盖了原本的列表结构,没有把所有提取到的链接存入列表 - 随机选择逻辑放在了循环内部,每次遍历到一条链接就对单条字符串做随机选取,最终输出的是单个字符而非完整链接
修正后可运行代码
from bs4 import BeautifulSoup import urllib import requests import re import random url = "https://www.formula1.com/en/latest.html" articles = [] # 修正原变量拼写错误respone为response response = urllib.request.urlopen(url) soup = BeautifulSoup(response,'lxml') def getItems(): # 先收集所有符合规则的链接 for a in soup.findAll('a',attrs={'href': re.compile("/en/latest/article.")}): # 使用append方法将链接添加到列表,不要直接赋值覆盖列表变量 articles.append(a['href']) # 所有链接收集完成后再执行随机选择 x = random.choice(articles) print(x) # 调用定义好的函数执行逻辑 getItems()
逻辑说明
- 循环内仅执行链接收集操作,通过
append()把每条匹配的href存入articles列表 - 循环结束后再调用
random.choice(articles),此时传入的是完整的链接列表,会随机返回一个完整的链接地址
内容的提问来源于stack exchange,提问作者Marceli Borowczak
相关产品推荐
相关产品推荐

