Очистка текста внутреннего div

Я новичок в очистке python. Для пробы я искал на странице Google «города в Огайо». Я хочу царапать результат, то есть название городов, которые находятся в полях с изображениями (мне просто нужен текст). Хотя есть много div, поэтому я не понимаю, как найти div, который имеет название города, которое является текстом. Я просто хочу царапать текст, написанный под Columbus. Я хочу этого Колумба. И название другого города также находится в этом div.

Не могли бы вы научиться этому?

import bs4
import requests
import html.parser
import lxml,
res = requests.get('https://www.google.com/search?rlz=1C1CHBF_enIN818IN818&ei=KejsXJTSLdu0rQGk3aeQDw&q=cities+in+Ohio&oq=cities+in+Ohio&gs_l=psy-ab.3..0i71l8.826656.826656..826671...0.0..0.0.0.......0....2j1..gws-wiz.N2bmaS9Bitw')
soup = bs4.BeautifulSoup(res.text, 'lxml')
type(soup)
<class 'bs4.BeautifulSoup'>
soup.select('.wfg6Pb')[]

Вывод всегда [] . Пожалуйста, используйте ссылку в коде, чтобы получить результат.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
213
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

чтобы сделать эту работу для меня, мне нужно было сделать 2 вещи:

  1. добавить локализацию в параметры запроса URL (hl=en&gl=en), иначе я получил бы результаты на иврите (серфинг из Израиля...)
  2. Идентифицируйте сами имена с помощью чуть более конкретного селектора (а то я тоже получил какие-то несвязанные информационные блоки)

в общем, мой код выглядит так:

import bs4
import requests
import html.parser
import lxml
res = requests.get('https://www.google.com/search?hl=en&gl=en&rlz=1C1CHBF_enIN818IN818&ei=KejsXJTSLdu0rQGk3aeQDw&q=cities+in+Ohio&oq=cities+in+Ohio&gs_l=psy-ab.3..0i71l8.826656.826656..826671...0.0..0.0.0.......0....2j1..gws-wiz.N2bmaS9Bitw')
soup = bs4.BeautifulSoup(res.content, 'lxml')
city_divs = soup.select('a.Mlb36b div.s3v9rd')
city_names = [c.text for c in city_divs]

и вывод для city_divs:

[<div class = "BNeawe s3v9rd AP7Wnd">Columbus</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Cleveland</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Cincinnati</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Dayton</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Toledo</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Akron</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Youngstown</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Findlay</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Kent</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Chillicothe</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Westerville</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Zanesville</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Wooster</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Elyria</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Hilliard</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Grove City</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Lorain</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Massillon</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Perrysburg</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Strongsville</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Cuyahoga Falls</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Maumee</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Reynoldsburg</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Stow</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Port Clinton</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Pickerington</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Steubenville</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">North Canton</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Gahanna</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Ashtabula</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Beachwood</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">New Philadelphia</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Miamisburg</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Wadsworth</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Bellefontaine</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Painesville</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Put‑in‑Bay</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Worthington</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Twinsburg</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Chagrin Falls</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">North Olmsted</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Barberton</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Canal Winchester</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Wright‑Patterson Air Force...</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Yellow Springs</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Shaker Heights</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Oberlin</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Upper Arlington</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Blue Ash</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Rocky River</div>,
 <div class = "BNeawe s3v9rd AP7Wnd">Pataskala</div>]

а для city_names это:

['Columbus',
 'Cleveland',
 'Cincinnati',
 'Dayton',
 'Toledo',
 'Akron',
 'Youngstown',
 'Findlay',
 'Kent',
 'Chillicothe',
 'Westerville',
 'Zanesville',
 'Wooster',
 'Elyria',
 'Hilliard',
 'Grove City',
 'Lorain',
 'Massillon',
 'Perrysburg',
 'Strongsville',
 'Cuyahoga Falls',
 'Maumee',
 'Reynoldsburg',
 'Stow',
 'Port Clinton',
 'Pickerington',
 'Steubenville',
 'North Canton',
 'Gahanna',
 'Ashtabula',
 'Beachwood',
 'New Philadelphia',
 'Miamisburg',
 'Wadsworth',
 'Bellefontaine',
 'Painesville',
 'Put‑in‑Bay',
 'Worthington',
 'Twinsburg',
 'Chagrin Falls',
 'North Olmsted',
 'Barberton',
 'Canal Winchester',
 'Wright‑Patterson Air Force...',
 'Yellow Springs',
 'Shaker Heights',
 'Oberlin',
 'Upper Arlington',
 'Blue Ash',
 'Rocky River',
 'Pataskala']

Привет, Адам, где ты нашел эти "Mlb36b" и "s3v9rd". Я пытался, но не смог найти в коде после проверки. Кстати, я нацелился на <div class = "wfg6Pb"> этот div, чтобы удалить текст.

Ashish Panchal 29.05.2019 09:27

Когда я использую for i в супе. выберите ('a'): print (i.text) он дает весь текст на странице под «<a>», и текст, который мне нужен, также находится в «a», но в другом разд. Итак, можно ли ограничить код, чтобы удалить только текст под этим <div class = "wfg6Pb"> of 'a'

Ashish Panchal 29.05.2019 10:40

А родительский элемент div 'a' и < div class = "wfg6Pb"> равен <div class = "uais2d">

Ashish Panchal 29.05.2019 10:48

Вместо того, чтобы самому лазить туда через свой браузер (который может выполнять больше действий на основе скриптов и прочего), я просто проверил, как выглядит ответ get (на Python). Я нашел div с текстом «Колумбус» и проложил себе путь оттуда.

Adam.Er8 29.05.2019 11:01

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

Adam.Er8 29.05.2019 11:02

Это сработало и дало мне тот же результат, что и ваш вывод. Но я хочу выучить фрагмент текста из внутреннего div. Например, используйте это «для i в супе. выберите ('a'): print (i.text)» и посмотрите результат. Среди результатов мне нужны только названия городов, а не что-то еще. Это возможно?

Ashish Panchal 29.05.2019 11:17

Кстати, наконец, я сделал это. Это было случайно, но да сделал это. Спасибо за вашу поддержку.

Ashish Panchal 29.05.2019 12:45

все зависит от конкретной структуры веб-страницы и определения места размещения необходимых данных. здесь мне помог тот факт, что у вас могут быть сложные селекторы с условиями для родителей, а не только для нужного вам div.

Adam.Er8 29.05.2019 13:08

Другие вопросы по теме