NameError: имя «Заголовок» не определено (почему «Заголовок» не определено) - PullRequest
0 голосов
/ 04 мая 2018

Код ниже работает до последней строки:

writer.writerow([Title, Views, Likes, Dislikes, datetime.now()])

и я получаю эту ошибку:

NameErrorTraceback (most recent call last)
<ipython-input-45-1666dd7f773b> in <module>()
----> 1 writer.writerow([Title, Views, Likes, Dislikes, datetime.now()])

NameError: name 'Title' is not defined

Может кто-нибудь сказать мне, что происходит ???? (Использование python2 с Jupyter)

from urllib2 import urlopen
from bs4 import BeautifulSoup
import pandas as pd
import re
import requests



myurl = 'https://www.youtube.com/results?search_query=sports'





page = requests.get("https://www.youtube.com/results?search_query=sports")
page.status_code


soup = BeautifulSoup(page.content, 'html.parser')
soup
link_list = []

for link in soup.select('div.yt-lockup-content a[href^=/watch]'):
    newLink = link.attrs.get('href')
    link_list.append(newLink)

print(link_list[0:6])

index = range(len(link_list))
columns = ['Links', 'Title', 'Views', 'Likes', 'Dislikes']
df = pd.DataFrame(index=index, columns=columns)

df['Links'] = link_list
df['Links'] = 'https://www.youtube.com/' + df['Links']


for i in range(len(link_list)):
    if i<5 or i>len(link_list)-5:
        print('{} out of {}'.format(i, len(link_list)))


    html = urlopen(df['Links'][i]).read()
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html.decode('utf-8', 'ignore'))

    df['Title'][i] = soup.title.get_text()
    df['Views'][i] = int(re.sub('[^0-9]', '',soup.select('.watch-view-count')[0].get_text().split()[0]))


    df['Title'][i] = soup.title.get_text()
    df['Views'][i] = int(re.sub('[^0-9]', '', soup.select('.watch-view-count')[0].get_text().split()[0]))


    a = str(soup.find_all('button', \
      attrs={'title': 'I like this'})).replace(",","")
    df['Likes'][i] = float(re.findall(r'\d+', a)[0])


    a = str(soup.find_all('button', \
      attrs={'title': 'I dislike this'})).replace(",","")
    df['Dislikes'][i] =  float(re.findall(r'\d+', a)[0])


print(df.sort_values('Views', ascending = False).head())


print(df.sort_values('Views', ascending = False))

with open('youtube.csv', 'a') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow([Title, Views, Likes, Dislikes, datetime.now()])

1 Ответ

0 голосов
/ 04 мая 2018

В строке

writer.writerow([Title, Views, Likes, Dislikes, datetime.now()])

вы используете Title, а не "Title". Python интерпретирует это как Go find the variable Title and put its value here. Когда то, что вы действительно пытаетесь сделать, это передать строковое значение "Title". Вам нужно поместить Title, Views, Likes и Dislikes в кавычки.

...