0
0 комментариев

Создаю парсер на питоне вопросов сайта stackoverflow.Код:

import requests
from bs4 import BeautifulSoup
 
try:
    pages = int(input("[*]Pages\n[int]>>>"))
except Exception:
    print("\n[ERROR]|--------------NOT INT NUMBER------------------|[ERROR]\n")
    raise SystemExit
print("\n[WARNING]|--------START---------|[WARNING]\n")
 
 
 
def trade(max_pages):
    try:
        page = 1
        while page <= max_pages:
            url = 'https://ru.stackoverflow.com/questions?page=' + str(page) + "&sort=newest"
            source_code = requests.get(url)
            main_text = source_code.text
            soup = BeautifulSoup(main_text,"html.parser")
            print("\n[PARSER]|------URL;NAMES------|[PARSER]\n")
 
            for link in soup.findAll('a',{'class':'question-hyperlink'}):
                href = 'https://ru.stackoverflow.com' + link.get('href')
                text = link.string
            for i in soup.findAll('span',{"class":"reputation-score"}):
                rekt = i.string
            for item_name in soup.findAll ('span', {"class": "relativetime"}):
                when = item_name.string
 
            page += 1
       print("\n[+]NameAsk:" + text +"\n[+]When:" + str(when) + "\n[+]Rekt:" + rekt + "\n[+]Url:",href)
 
    except Exception:
        print("\n[WARNING]|----PAGE OR SITE NO FOUND----|[WARNING]\n")
        print("\n[ERROR]|------------------------|[ERROR]\n")
        raise SystemExit
 
 
trade(pages)
 
print("\n[STOP]|--------FINISH---------|[STOP]\n")

Мой парсер , выводит только последний вопрос , с её информацией вот такого вида:

[*]Pages
[int]>>>1
 
[WARNING]|--------START---------|[WARNING]
 
 
[PARSER]|------URL;NAMES------|[PARSER]
 
 
[+]NameAsk:Генерация X-Secret-Key
[+]When:3 часа назад
[+]Rekt:246
[+]Url: https://ru.stackoverflow.com/questions/746024/%d0%93%d0%b5%d0%bd%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d1%8f-x-secret-key
 
[STOP]|--------FINISH---------|[STOP]

Если использовать другой способ вывода текста , всё будет немного получше , но печально :

for link in soup.findAll('a',{'class':'question-hyperlink'}):
            href = 'https://ru.stackoverflow.com' + link.get('href')
            text = link.string
            for item_name in soup.findAll ('span', {"class": "relativetime"}):
                when = item_name.string
            for i in soup.findAll ('span', {"class": "reputation-score"}):
                rekt = i.string
            print ("\n[+]NameAsk:" + text + "\n[+]When:" + str (when) + "\n[+]Rekt:" + rekt + "\n[+]Url:", href)

(код не весь , но как вы можете заметить , теперь я вывожу текст внутри цикла нахождении имени вопроса)
То получаю все вопросы , но с одинаковыми значениями rekt и when .
Если вывести текст вот так:

             for link in soup.findAll('a',{'class':'question-hyperlink'}):
                href = 'https://ru.stackoverflow.com' + link.get('href')
                text = link.string
                for item_name in soup.findAll ('span', {"class": "relativetime"}):
                    when = item_name.string
                for i in soup.findAll ('span', {"class": "reputation-score"}):
                    rekt = i.string
                    print ("\n[+]NameAsk:" + text + "\n[+]When:" + str (when) + "\n[+]Rekt:" + rekt + "\n[+]Url:", href)

В данном случае выведутся все вопросы ,значение when всегда одинаково
, но вопросы будут выводится те же самые , только с разными значениями rekt.

Если всё выводить через цикл с нахождением времени — ситуацию будет точно такая же как и с rekt,только весь этот ужас будет происходить с переменной when

Как правильно вывести текст , что бы значение text , when,rekt — были равны значению информации о вопросе?


Добавить комментарий