Зачистка двух страниц одновременно: ошибка панд - PullRequest
0 голосов
/ 24 октября 2019

Я хочу сохранить обзоры фильмов и названия фильмов с этих двух страниц.

https://movie.naver.com/movie/bi/mi/pointWriteFormList.nhn?code=~
https://movie.naver.com/movie/bi/mi/basic.nhn?code=~

И когда я запустил этот код и открыл файл csv.

ValueError:Форма передаваемых значений (2, 6), индексы подразумевают (2, 10) saved csv file

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

#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']

#print(soup.find_all('div', 'score_reple'))
#div = soup.find('h3', 'h_movie')

df = pd.DataFrame()
for n in pages:
    # Create url
    url = base_url + n
    url2 = base_url2 + n

    # Parse data using BS
    print('Downloading page %s...' % url)
    print('Downloading page %s...' % url2)

    res = requests.get(url)
    soup = BeautifulSoup(res.text, "html.parser")
    reple = soup.find_all('div', 'score_reple')
    res2 = requests.get(url2)
    soup = BeautifulSoup(res2.text, "html.parser")
    title = soup.find('h3', 'h_movie')
    #ratesc = soup.find('','')
    #story=rname.getText()
    #data = [title,reple]
    data = {'title':[title], 'reviewn':[reple]}
    df = df.append(pd.DataFrame(data), sort=True).reset_index(drop=True)

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

Как исправить этот код?

Ответы [ 2 ]

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

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

title = str(soup.find('h3', 'h_movie'))
start = '" title="'
end = '                                     ,                   2018">'
newTitle = title[title.find(start)+len(start):title.rfind(end)]

Затем попробуйте то же самое в разделе обзора. Вы захотите сузить набор результатов, а затем преобразовать его в строку, в которой находятся разделы обзора, и наложить на нее ограничения.

Затем вы очистите данные и будете готовы добавить их в DataFrame.

Надеюсь, это поможет вам выбрать правильный путь!

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

А теперь все чисто ... просто удалите теги примерно так:

from bs4 import BeautifulSoup
from urllib.request import urlopen
#from selenium import webdriver
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

    res = requests.get(url)
    soup = BeautifulSoup(res.text, "html.parser")
    reple = soup.find("span", {"id":re.compile("^_filtered_ment")}).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')

Я добавил import re для регулярного выражения класса _filtered_ment _ *

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