0

Web クローラーを作成しようとしています。現在、YouTube でテストしているだけですが、後でさらに拡張する予定です。とりあえず、まだまだ勉強中です。

現在、情報を csv にエクスポートしようとしています。以下のコードは現在持っているもので、タイトルの説明を取得するために実行していたときにうまく機能しているように見えました。ただし、「ビュー」と「いいね」を取得するコードを追加すると、コンマが含まれているため、出力ファイルが台無しになります。

これを回避するために私に何ができるか知っている人はいますか?

import urllib2
import __builtin__
from selenium import webdriver
from selenium.common.exceptions import NoSuchAttributeException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
from time import sleep
from random import randint
from lxml import etree

browser = webdriver.Firefox()
time.sleep(2)
browser.get("https://www.youtube.com/results?search_query=funny")
time.sleep(2)
browser.find_element_by_xpath("//*[@id='section-list']/li/ol/li[1]/div/div/div[2]/h3/a").click()
time.sleep(2)
url = browser.current_url
title = browser.find_element_by_xpath("//*[@id='eow-title']").text
views = browser.find_element_by_xpath("//*[@id='watch7-views-info']/div[1]").text
likes = browser.find_element_by_xpath("//*[@id='watch-like']/span").text
dislikes = browser.find_element_by_xpath("//*[@id='watch-dislike']/span").text
tf = 'textfile.csv'
f2 = open(tf, 'a+')
f2.write(', '.join([data.encode('utf-8') for data in [url]]) + ',')
f2.write(', '.join([data.encode('utf-8') for data in [title]]) + ',')
f2.write(', '.join([data.encode('utf-8') for data in [views]]) + ',')
f2.write(', '.join([data.encode('utf-8') for data in [likes]]) + ',')
f2.write(', '.join([data.encode('utf-8') for data in [dislikes]]) + '\n')
f2.close()
4

2 に答える 2

1

まず、これらの数字がポイントではなくコンマで表示されるという事実は、YouTube がブラウザーで検出した言語と地域の設定に依存しています。

とを文字列として取得したらviews、次のような操作を実行してカンマを取り除くことができます。likesdislikes

likes = "3,141,592"
likes = likes.replace(',', '')  # likes is now: "3141592"
likes = int(likes)  # likes is now an actual integer, not just a string

これは、これら 3 つのパラメーターがすべて整数であるため機能するため、非整数部分の開始を示すために実際に重要なコンマやポイントについて考え始める必要はありません。

最後に、csv モジュールの使用方法に関する良い例は、インターネット上のどこにでもあります。Python Module of the Weekのものをお勧めします。例を理解すれば、コードを変更してこの非常に効率的なモジュールを使用できるようになります。

于 2014-12-01T13:43:24.197 に答える
0

生の csv 形式を自分で記述する必要はありません。https://docs.python.org/2/library/csv.htmlを使用します。

サンプルコード:

stringio = StringIO.StringIO()
csv_writer = csv.writer(stringio)
csv_writer.writerow([data.encode('utf-8') for data in [url]])
csv_writer.writerow([data.encode('utf-8') for data in [title]])
csv_writer.writerow([data.encode('utf-8') for data in [views]])
csv_writer.writerow([data.encode('utf-8') for data in [likes]])
csv_writer.writerow([data.encode('utf-8') for data in [dislikes]])
with open('textfile.csv') as fp:
  fp.write(stringio.getvalue())

の目的が理解できません[data.encode('utf-8') for data in [url]]:

csv_writer.writerow([data.encode('utf-8') for data in [url, title, views, likes, dislikes]])

csv.writer(open('textfile.csv', 'a+'))文字列バッファに書き込まずに試すこともできます。

于 2014-12-01T14:37:55.510 に答える