Не удается вытащить данные из pantip.com - PullRequest
0 голосов
/ 02 января 2019

Я пытался получить данные с сайта pantip.com, включая заголовок, публикацию и все комментарии, используя beautifulsoup. Тем не менее, я мог вытащить только название и должность. Я не мог получить комментарии. Вот код для заголовка и поста

import requests
import re
from bs4 import BeautifulSoup


# specify the url
url = 'https://pantip.com/topic/38372443'

# Split Topic number
topic_number = re.split('https://pantip.com/topic/', url)
topic_number = topic_number[1]


page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

# Capture title
elementTag_title = soup.find(id = 'topic-'+ topic_number)
title = str(elementTag_title.find_all(class_ = 'display-post-title')[0].string)

# Capture post story
resultSet_post = elementTag_title.find_all(class_ = 'display-post-story')[0]
post = resultSet_post.contents[1].text.strip()

Я пытался найти по идентификатору

elementTag_comment = soup.find(id = "comments-jsrender")

согласно enter image description here

Я получил результат ниже.

elementTag_comment =

<div id="comments-jsrender">
<div class="loadmore-bar loadmore-bar-paging"> <a href="javascript:void(0)"> 
<span class="icon-expand-left"><small>▼</small></span> <span class="focus- 
txt"><span class="loading-txt">กำลังโหลดข้อมูล...</span></span> <span 
class="icon-expand-right"><small>▼</small></span> </a> </div>
</div>

Вопрос в том, как я могу получить все комментарии. Подскажите пожалуйста, как это исправить.

1 Ответ

0 голосов
/ 03 января 2019

Причина, по которой у вас возникают проблемы с поиском остальных этих постов, заключается в том, что сайт заполнен динамическим javascript.Чтобы обойти это, вы можете реализовать решение с селеном, смотрите здесь, как получить правильный драйвер и добавить в ваши системные переменные https://github.com/mozilla/geckodriver/releases.Selenium загрузит страницу, и у вас будет полный доступ ко всем атрибутам, которые вы видите на скриншоте, просто красивый суп, что данные не анализируются.

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

from bs4 import BeautifulSoup
from selenium import webdriver

url='https://pantip.com/topic/38372443'
driver = webdriver.Firefox()
driver.get(url)
content=driver.page_source
soup=BeautifulSoup(content,'lxml')

for div in soup.find_all("div", id=lambda value: value and value.startswith("comment-")):
    if len(str(div.text).strip()) > 1:
        print(str(div.text).strip())

driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...