Загруженные запросы HTML отличаются от Devtools в Chrome - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь следовать некоторому коду в главе 11 «Автоматизация скучных вещей с помощью Python».Однако одна из программ lucky.py, похоже, не работает для меня.Предполагается, что программа получит страницу поиска Google по определенной теме с помощью модуля запросов, а затем откроет первые 5 результатов поиска в разных вкладках.Когда я смотрю на Devtools в Chrome для страницы поиска, мне становится совершенно ясно, что каждая ссылка на результат поиска (тег <a>) находится внутри элемента div с классом «r».Однако, когда я запрашиваю страницу, отправляю загруженный HTML в файл .txt и просматриваю его, я обнаруживаю, что коды для ссылки на результат поиска совершенно разные.Почему они разные?Разве не цель devtools в том, чтобы быстро проверить HTML-код определенного элемента на веб-странице, не просматривая весь исходный код?

Раньше я пытался soup.select('.r a') работатьпотому что каждая страница поиска имела ссылки на результаты поиска в div с классом 'r'.Это не сработало.Возвращенный список всегда был пустым.Поэтому для устранения неполадок я отправил запрошенную страницу в файл и нашел, где были ссылки.Все ссылки в текстовом файле приводят к ошибке 404.Я не знаю, что происходит.

Код Devtools:

<div class="r">
<a href="https://www.crummy.com/software/BeautifulSoup/bs4/doc/" ping="/urlsa=t&amp;source=web&amp;rct=j&amp;url=https://www.crummy.com/software/BeautifulSoup/bs4/doc/&amp;ved=2ahUKEwjj1vTx3NXiAhVPinAKHersDyoQFjAAegQIAhAB"><h3 class="LC20lb">Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation</h3><br><div class="TbwUpd"><cite class="iUh30">https://www.crummy.com/software/BeautifulSoup/bs4/doc/</cite>

Теперь я нашел ссылку на запрашиваемой странице:

<div class="jfp3ef"> 
<a href="/urlq=https://www.crummy.com/software/BeautifulSoup/bs4/doc/&amp;sa=U&amp;ved=2ahUKEwjMjPST2tXiAhU463MBHWjMA0UQFjAAegQIChAB&amp;usg=AOvVaw05aFh5uUJ_Z2oREgu8fzfA">

Этокод, который я использовал для получения страницы:

res = requests.get('https://www.google.com/search?q=' + ' '.join(['beautiful', 'soup'])
bs = open('soup.txt', 'wb')
for chunk in res.iter_content(100000):
    bs.write(chunk)

1 Ответ

0 голосов
/ 07 июня 2019

Вам почти наверняка нужно отключить JavaScript, чтобы иметь возможность видеть элементы, как это делает ваша программа.https://github.com/maximelebreton/quick-javascript-switcher Вы можете найти его на странице расширений / дополнений Chrome.Это позволит вам отключить JavaScript на странице.После этого вы заметите, что страница будет выглядеть по-разному, и ваши ссылки, скорее всего, будут в разных элементах / классах.

Вы сможете найти правильный способ нацеливания элементов с вашими devtools после того, какчто.

Ссылки могут не работать из-за какого-то файла cookie, вставленного Google?Однако тот факт, что у вас есть список без ссылок, заставляет меня думать, что вы не получили правильный селектор CSS.

...