#python #beautifulsoup
#python #beautifulsoup
Вопрос:
Предупреждение о срабатывании: я новичок
import requests
from bs4 import BeautifulSoup
from termcolor import colored
with open('ign.txt') as f:
namesList = f.readlines()
print("Accounts found: ", namesList) # Opening file and reading it
for x in namesList:
url = "https://oldschool.runeclan.com/user/" x # Adding username from file to URL
print(url)
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0'}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find(class_="xp_tracker_gain_today").get_text()
title2 = soup.find(class_="xp_tracker_gain altcolor xp_tracker_pos").get_text()
title3 = soup.find(class_="xp_tracker_next").get_text() # Finding right information on site
print(colored("Exp gain today: " title, 'green'))
print(colored("Exp gain yesterday: " title2, 'green'))
print(colored(title3, 'green')) # Printing data found
Когда я изменяю свой URL-адрес url = "https://oldschool.runeclan.com/user/" x
Я получаю следующее сообщение об ошибке
Ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘get_text’
Что должно означать, что ничего не найдено.
Это вывод из верхней половины кода Accounts found: ['mausien', 'mr stevieyhn', 'Douwen', 'Henkn']https://oldschool.runeclan.com/user/mausie
Итак, ссылка, которую я сделал, верна
Когда я не пытаюсь изменить URL-адрес и делаю, скажем url = "https://oldschool.runeclan.com/user/myusername"
Он не выдает ошибки. Однако я хочу выполнить цикл через свой файл, чтобы проверить более 1 имени пользователя.
Кто-нибудь знает, как это исправить?
Комментарии:
1. Можете ли вы показать, что
print(url)
дает?2. @AbrarAhmed oldschool.runeclan.com/user/mausie Какой должен быть правильный URL-адрес, вот почему я в замешательстве: D
3. Это тот, который работает. Я хотел сказать.. Правильно ли вы выводите имена пользователей из файла? Поделитесь тем, который не работает.
4. oldschool.runeclan.com/user/Douwe .. Для этого пользователя нет данных. Ни для
mrstevieyh
этого. Вот почему ошибка.5. Это mr stevieyh, а не mrstevieyh. Я удалил те, у которых нет данных, и все равно получаю ту же ошибку. у mausie и mr stevieyh есть данные.
Ответ №1:
Вот в чем проблема. Когда вы читаете из текста file…an дополнительная n
информация о новой строке добавляется к вашему URL-адресу. Вот почему запросы возвращают ошибку 404 page not found. Хорошая идея — проверить, используя print(repr(url))
вместо print(url)
. Это покажет вам лишнее 'n
. Чтобы исправить это, мы просто делаем url=url.rstrip()
и вуаля..Это работает.
import requests
from bs4 import BeautifulSoup
from termcolor import colored
with open('Sample', encoding='utf-8-sig') as f:
namesList = f.readlines()
print("Accounts found: ", namesList) # Opening file and reading it
for x in namesList:
url = "https://oldschool.runeclan.com/user/" x # Adding username from file to URL print(repr(url))
print(repr(url))
url = url.rstrip()
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find(class_="xp_tracker_gain_today").text
title2 = soup.find(class_="xp_tracker_gain altcolor xp_tracker_pos").text
title3 = soup.find(class_="xp_tracker_next").text # Finding right information on site
print(colored("Exp gain today: " title, 'green'))
print(colored("Exp gain yesterday: " title2, 'green'))
print(colored(title3, 'green')) # Printing data found
Вывод:-
Accounts found: ['mausien', 'mr stevieyhn']
'https://oldschool.runeclan.com/user/mausien'
Exp gain today: 233,508
Exp gain yesterday: 469,011
Last tracked: 1 minute agoNext track available: now
'https://oldschool.runeclan.com/user/mr stevieyhn'
Exp gain today: 129,203
Exp gain yesterday: 730,434
Last tracked: 1 minute agoNext track available: now
Это n
было проблемой с самого начала.
Комментарии:
1. Большое вам спасибо, Абрар!!