Urllib Python не извлекает комментарии читателя с веб-сайта

#python #web-scraping #urllib

#python #веб-очистка #urllib

Вопрос:

Я пытаюсь извлечь комментарии читателя со следующей страницы с помощью кода, показанного ниже. Но выходной html test.html не содержит никаких комментариев со страницы. Как мне получить эту информацию с помощью Python?

http://www.theglobeandmail.com/opinion/it-doesnt-matter-who-won-the-debate-america-has-already-lost/article32314064/comments/

 from bs4 import BeautifulSoup
import urllib
import urllib.request
import urllib.parse

req =urllib.request.Request('http://www.theglobeandmail.com/opinion/it-doesnt-matter-who-won-the-debate-america-has-already-lost/article32314064/comments/')
response = urllib.request.urlopen(req)
the_page = response.read()

soup = BeautifulSoup(the_page, 'html.parser')
f = open('test.html', 'w')
f.write(soup.prettify())
f.close()
 

Спасибо!

Комментарии:

1. Комментарии, скорее всего, извлекаются с помощью js. Вы можете либо использовать библиотеку очистки, которая включает в себя среду выполнения browser js (pahtomjs и т. Д.), Либо попытаться выяснить, что такое api для извлечения комментариев, И использовать его напрямую.

Ответ №1:

Комментарии извлекаются с помощью запросов ajax, которые вы можете имитировать:

введите описание изображения здесь

Вы можете видеть, что существует множество параметров, но того, что приведено ниже, достаточно для получения результата, я оставлю это вам, чтобы выяснить, как вы можете повлиять на результаты:

 from json import loads
from urllib.request import  urlopen
from urllib.parse import urlencode

data = {"categoryID":"Production",
    "streamID":"32314064",
    "APIKey":"2_oNjjtSC8Qc250slf83cZSd4sbCzOF4cCiqGIBF8__5dWzOJY_MLAoZvds76cHeQD",
    "callback" :"foo",}
r = urlopen("http://comments.us1.gigya.com/comments.getComments", data=urlencode(data).encode("utf-8"))
json_dcts = loads(r.read().decode("utf-8"))["comments"]

print(json_dcts)
 

Это дает вам список dicts, в котором содержатся все комментарии, положительные, отрицательные и т. Д.. Если вы хотите проанализировать ключ, который находится в URL-адресе внутри одного из скриптов src='https://cdns.gigya.com/js/socialize.js?apiKey=2_oNjjtSC8Qc250slf83cZSd4sbCzOF4cCiqGIBF8__5dWzOJY_MLAoZvds76cHeQD' , идентификатор потока находится в вашем исходном URL.

Комментарии:

1. Спасибо за ваш ответ! Я попробовал, и это сработало. Но у меня есть несколько вопросов:

2. Во-первых, откуда вы получили URL: comments.us1.gigya.com и, во-вторых, как вы отправляете ajax-запрос с помощью Python, чтобы получить все пары ключ-значение для создания соответствующего словаря данных. Я ничего не знаю об ajax-запросах. Не могли бы вы указать мне хороший источник для понимания ajax?

3. @user7009553, откройте firebug / chrome tools и т. Д. Посмотрите на вкладку «Сеть» в разделе XHR, и вы сможете увидеть выполняемые запросы. ajax -> Асинхронный JavaScript и XML developer.mozilla.org/en-US/docs/AJAX/Getting_Started