Зачистка многократных вещей с BeautifulSoup GetText для кода рута - PullRequest
0 голосов
/ 24 октября 2019

Я хочу получать каждые 3 отзыва на этих страницах. Но проблема в этом коде.

for i in range(0, 2): 
        res = requests.get(url)
        soup = BeautifulSoup(res.text, "html.parser")
        reple = soup.find("span", {"id":re.compile("^_filtered_ment_"+[i])}).getText()

Когда я запускаю этот код, появляется сообщение об ошибке.

Ошибка типа: должно быть str, а не list

И весь код

from bs4 import BeautifulSoup
from urllib.request import urlopen
from urllib.request import urljoin
import pandas as pd
import requests
import re

#url_base = 'https://movie.naver.com/movie/bi/mi/pointWriteFormList.nhn?code=25917&type=after&page=1'
base_url = 'https://movie.naver.com/movie/bi/mi/pointWriteFormList.nhn?code=' #review page
base_url2 = 'https://movie.naver.com/movie/bi/mi/basic.nhn?code=' #movie title
pages =['177374','164102']

df = pd.DataFrame()
for n in pages:
    # Create url
    url = base_url + n
    url2 = base_url2 + n
    for i in range(0, 2): 
        res = requests.get(url)
        soup = BeautifulSoup(res.text, "html.parser")
        reple = soup.find("span", {"id":re.compile("^_filtered_ment_"+[i])}).getText()


        res2 = requests.get(url2)
        soup = BeautifulSoup(res2.text, "html.parser")
        title = soup.find('h3', 'h_movie')
        for a in title.find_all('a'):
                #print(a.text)
                    title=a.text

    data = {'title':[title], 'reviewn':[reple]}
    df = df.append(pd.DataFrame(data))

df.to_csv('./title.csv', sep=',', encoding='utf-8-sig')

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Я думаю, вы хотите почистить первые 3 отзыва для каждой страницы. Я написал код и напечатал вывод, и я добавил несколько комментариев, чтобы вы поняли. Что-то, что вы не можете понять, пожалуйста, прокомментируйте, я помогу вам. Вы можете запуститьэто и видно на консоли вывод.

import urllib3
from bs4 import BeautifulSoup

# scrape urls
base_url_one = 'https://movie.naver.com/movie/bi/mi/pointWriteFormList.nhn?code='  # review page
base_url_two = 'https://movie.naver.com/movie/bi/mi/basic.nhn?code='  # movie title
pages = ['177374', '164102']

# how many review count need to get
review_count = 3

# create request pool
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
http = urllib3.PoolManager()

for page in pages:
    # create urls
    base_url_one = base_url_one + page
    base_url_two = base_url_two + page

    # request web pages
    response_one = http.request('POST', base_url_one)
    response_two = http.request('POST', base_url_two)

    # check response one status and scrape data
    if response_one.status == 200:
        page_data = response_one.data
        soup = BeautifulSoup(page_data, "lxml")
        comment_list = soup.find_all('div', {'class': 'score_reple'})

        for index in range(0, review_count):
            try:
                comment_text = comment_list[index].find('p').text.strip()
                print(comment_text)
            except IndexError:
                pass

     print("-------------")

     # check response two status and scrape data
     if response_two.status == 200:
         page_data = response_two.data
         soup = BeautifulSoup(page_data, "lxml")
         comment_list = soup.find_all('div', {'class': 'score_reple'})

         for index in range(0, review_count):
             try:
                 comment_text = comment_list[index].find('p').text.strip()
                 print(comment_text)
             except IndexError:
                 pass

scraped data

0 голосов
/ 24 октября 2019
Ошибка

довольно проста. Сообщает вам точно, в чем проблема.

Проблема связана со строкой:

 reple = soup.find("span", {"id":re.compile("^_filtered_ment_"+[i])}).getText()

у вас есть переменная i как list. И это тоже должна быть строка. Наконец, до / после содержимого / текста много пробелов, поэтому я использовал .strip(), чтобы удалить его.

измените его на:

 reple = soup.find("span", {"id":re.compile("^_filtered_ment_"+str(i))}).getText().strip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...