【问题标题】:Python scraping and outputting to excelPython抓取并输出到excel
【发布时间】:2014-11-29 22:29:23
【问题描述】:

我正在尝试创建一个网络爬虫。我目前只是在 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()

【问题讨论】:

  • Python 有一个名为 csv 的模块,为读取和写入 csv 文件提供了一个很好的接口。
  • 你能给我一个例子,说明我如何将它与我创建的东西一起使用吗?我以前尝试过使用它,但我无法掌握它。将不胜感激。谢谢!

标签: python csv web-scraping regional-settings


【解决方案1】:

首先,您看到的这些数字是逗号而不是一个点,这取决于 youtube 为您的浏览器检测到的语言和区域设置。

viewslikesdislikes 作为字符串后,您可以执行以下操作来去掉逗号:

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 的那个。如果您理解这些示例,您将能够更改您的代码以使用这个高效的模块。

【讨论】:

    【解决方案2】:

    您无需自己编写原始 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+')),而无需写入字符串缓冲区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      相关资源
      最近更新 更多