Beautifulsoup возвращает только h1 из последнего HTML исходного кода: - PullRequest
0 голосов
/ 09 января 2020

У меня есть этот алгоритм ниже:

from bs4 import BeautifulSoup
import requests


data = [{"operationName": "SearchQuery", "variables": {"query": "Python", "after": None, "first": 2},
         "query": "query SearchQuery($query: String!, $first: Int!, $after: ID) {\n  questionSearch(query: $query, first: $first, after: $after) {\n    count\n    edges {\n      node {\n        id\n        databaseId\n        author {\n          id\n          databaseId\n          isDeleted\n          nick\n          avatar {\n            thumbnailUrl\n            __typename\n          }\n          rank {\n            name\n            __typename\n          }\n          __typename\n        }\n        content\n        answers {\n          nodes {\n            thanksCount\n            ratesCount\n            rating\n            __typename\n          }\n          hasVerified\n          __typename\n        }\n        __typename\n      }\n      highlight {\n        contentFragments\n        __typename\n      }\n      __typename\n    }\n    __typename\n  }\n}\n"}]
r = requests.post("https://brainly.com.br/graphql/pt", json=data).json()

p=[]    
for item in r[0]['data']['questionSearch']['edges']:
    rst=(f"https://brainly.com.br/tarefa/{item['node']['databaseId']}")
    p.append(rst)

for ele in p: 
    r = requests.get(ele).text 


soup = BeautifulSoup(r,'html.parser')

for n in soup.find_all('div', attrs={'class': 'brn-content-image'}):    
   print(n.find('h1').text) 

И мне нужно отфильтровать эти 2 HTML:

<div class="brn-content-image">
<h1 class="sg-text sg-text--large sg-text--regular">
O que é for em python?​
</h1> 

И:

<div class="brn-content-image">
<h1 class="sg-text sg-text--large sg-text--regular">
Linguagem ( Python )<br /><br />a) Quem foi(ram) o(s) criador(es) do python? <br /><br />b) Cite como se declara uma variáveis:<br /><br />c) O que é uma variável?<br /><br />d) O que é uma função?<br /><br />e) para que serve às { } no python?​​
</h1>
</div> 

Ожидается Выход:

1 h1 - Linguagem (Python)

a) Quem foi (ram) o (s) criador (es) do python?

b ) Скажите, что вы заявляете о себе:

c) Что вы думаете об этом?

г) Вы говорите об этом?

е) Пара служит вам {} нет python?

2 h1 -O que é для em python?

У меня есть 2 HTML Страница в той же переменной; Проблема в том, что я могу фильтровать только 2 h1 ie >> O que é для em python?

И мне нужно печатать оба! Что я делаю неправильно:

1 Ответ

2 голосов
/ 09 января 2020

soup переменная, которую вы использовали снаружи для l oop, поэтому вы получаете только 2-е html значение. Это должно быть внутри для l oop. Попробуйте сейчас.

for ele in p:
    r = requests.get(ele).text
    soup = BeautifulSoup(r,'html.parser')

    for n in soup.find_all('div', attrs={'class': 'brn-content-image'}):
        print(n.find('h1').text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...