@AnKus

При чтении из файла, берет только последнюю строку. Почему?

Простейшая задача повергла в ступор.
При чтении из файла, почему-то берется только последняя строка (проверено, менял местами строки), а не все строки перебираются в цикле. Странно, ведь это простейшая заготовка. Скопипастил с предыдущего проекта, никакой реакции, мало того, в прошлом проекте возникла эта же проблема. Может обновилось что за последний месяц ?
Вот сам код:
from tqdm import tqdm
import requests
from bs4 import BeautifulSoup
from random import randint
from time import sleep

headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,'
              'application/signed-exchange;v=b3;q=0.9',
    'Accept-Language': 'en-US,en;q=0.9,ru-RU;q=0.8,ru;q=0.7,uk;q=0.6',
    'Connection': 'keep-alive',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-User': '?1',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 '
                  'Safari/537.36',
    'sec-ch-ua': '"Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Linux"',
}


def open_txt():
    with open('all_links.txt', 'r') as f:
        lines = [line.strip() for line in f.readlines()]
        return lines


def get_data(lines):
    products = []
    for line in lines:
        try:
            q = requests.get(line, headers=headers)
        except requests.ConnectionError as e:
            continue

    result = q.content

    soup = BeautifulSoup(result, 'lxml')
    # sleep(randint(1, 3))
    try:
        name = soup.find('div', class_='ty-product-block__left').find_next('h1', class_='ty-product-block-title').text
    except AttributeError:
        name = '-'
    print(name)


if __name__ == "__main__":
    get_data(open_txt())
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Ну так все логично:
for line in lines:
        try:
            q = requests.get(line, headers=headers)
        except requests.ConnectionError as e:
            continue

result = q.content

Значение q меняется каждую итерацию а получение значения q.content и вся дальнейшая работа происходит после завершения всего цикла и очевидно, что берется значение q, полученное последним.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы