HTTP-запрос BS4 выдает ошибку при редактировании URL-адреса в коде

#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. Большое вам спасибо, Абрар!!