Попытка извлечь жанр mov ie с помощью Beautiful Soup - PullRequest
0 голосов
/ 12 апреля 2020

Я изучаю утилизацию и пытаюсь извлечь жанр mov ie из результатов поиска Google. Я предоставил коды ниже. Я проверяю изображение с выделенной частью, которую я хочу извлечь Часть, которую я хочу извлечь, выделена

<div class="wwUB2c PZPZlf" data-attrid="subtitle"><span data-ved="2ahUKEwizlJiu9OLoAhXFgeYKHXzvAlMQ2kooAjAlegQIJhAN">1999 ‧ Romance/Comedy ‧ 2h 4m</span></div>

Я хочу извлечь часть "Романтика / Комедия "

import requests
from bs4 import BeautifulSoup as bs

url = requests.get("https://www.google.com/search?biw=1920&bih=1008&ei=uwqTXuyUB-Ov8QPIvbKACQ&q=notting+hill+&oq=notting+hill+&gs_lcp=CgZwc3ktYWIQAzIECCMQJzIHCAAQgwEQQzIECAAQQzIECAAQQzIECAAQQzIECAAQQzIECAAQQzIECAAQQzIFCAAQgwEyBAgAEEM6BAgAEEdKDQgXEgkxMC0xOThnMThKCggYEgYxMC0xZzNQwN0XWMDdF2CW3xdoAHADeACAAasBiAGrAZIBAzAuMZgBAKABAaoBB2d3cy13aXo&sclient=psy-ab&ved=0ahUKEwis3vbz8uLoAhXjV3wKHcieDJAQ4dUDCAw&uact=5")


soup = bs(url.text, "lxml")

soup.select(".subtitle") #in this case it is returning a empty list
soup.find("div", {"class": "wwUB2c PZPZlf"}) #in this case also it is returning a empty list
soup.find("span", {"data-ved": "2ahUKEwizlJiu9OLoAhXFgeYKHXzvAlMQ2kooAjAlegQIJhAN"}) #in this case also it is returning a empty list


Ответы [ 3 ]

0 голосов
/ 12 апреля 2020

Ну, во-первых, вам нужно сделать запрос

Неправильно:

soup = bs(url.text, "lxml")

Правильно:

soup = bs(requests.get(url).text, "lxml")

Во-вторых, эти данные (Romance / Comedy) загружаются AJAX, поэтому вы не можете получить их из запроса в поиске Google.

Я обновлю этот ответ, если найду, как помочь вам .

0 голосов
/ 12 апреля 2020

Многие классы выглядят динамично c. Вы можете попытаться установить связь между элементами в DOM и ужесточить с помощью: содержит при условии, что «text» появляется в интересующем тексте и ограничивается первым узлом

from bs4 import BeautifulSoup as bs
import requests

r = requests.get('https://www.google.com/search?biw=1920&bih=1008&ei=uwqTXuyUB-Ov8QPIvbKACQ&q=notting+hill+&oq=notting+hill+&gs_lcp=CgZwc3ktYWIQAzIECCMQJzIHCAAQgwEQQzIECAAQQzIECAAQQzIECAAQQzIECAAQQzIECAAQQzIECAAQQzIFCAAQgwEyBAgAEEM6BAgAEEdKDQgXEgkxMC0xOThnMThKCggYEgYxMC0xZzNQwN0XWMDdF2CW3xdoAHADeACAAasBiAGrAZIBAzAuMZgBAKABAaoBB2d3cy13aXo&sclient=psy-ab&ved=0ahUKEwis3vbz8uLoAhXjV3wKHcieDJAQ4dUDCAw&uact=5')
soup = bs(r.content, 'lxml')
print(soup.select_one('span div[class]:contains("‧")').text.split('‧')[1])
0 голосов
/ 12 апреля 2020

Попробуйте это.

from simplified_scrapy import SimplifiedDoc,req,utils
url = "https://www.google.com/search?biw=1920&bih=1008&ei=uwqTXuyUB-Ov8QPIvbKACQ&q=notting+hill+&oq=notting+hill+&gs_lcp=CgZwc3ktYWIQAzIECCMQJzIHCAAQgwEQQzIECAAQQzIECAAQQzIECAAQQzIECAAQQzIECAAQQzIECAAQQzIFCAAQgwEyBAgAEEM6BAgAEEdKDQgXEgkxMC0xOThnMThKCggYEgYxMC0xZzNQwN0XWMDdF2CW3xdoAHADeACAAasBiAGrAZIBAzAuMZgBAKABAaoBB2d3cy13aXo&sclient=psy-ab&ved=0ahUKEwis3vbz8uLoAhXjV3wKHcieDJAQ4dUDCAw&uact=5"
html = req.get(url)
#html = '''
#<div class="wwUB2c PZPZlf" data-attrid="subtitle">
#   <span data-ved="2ahUKEwizlJiu9OLoAhXFgeYKHXzvAlMQ2kooAjAlegQIJhAN">1999 ‧ Romance/Comedy ‧ 2h 4m</span>
#</div>
#'''
doc = SimplifiedDoc(html)
text = doc.getElement("div",attr="data-attrid",value="subtitle").text
print (text)

Результат:

1999 ‧ Romance/Comedy ‧ 2h 4m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...