我正在尝试抓一个论坛讨论并将其导出为csv文件,其中包含"thread title","user"和"post"等行,其中后者是每个人的实际论坛帖子.
我是Python和BeautifulSoup的初学者,所以我很难用这个!
我目前的问题是所有文本在csv文件中每行被拆分为一个字符.那里有谁可以帮助我吗?如果有人能帮我一把,真是太棒了!
这是我一直在使用的代码:
from bs4 import BeautifulSoup
import csv
import urllib2
f = urllib2.urlopen("https://silkroad5v7dywlc.onion.to/index.php?action=printpage;topic=28536.0")
soup = BeautifulSoup(f)
b = soup.get_text().encode("utf-8").strip() #the posts contain non-ascii words, so I had to do this
writer = csv.writer(open('silkroad.csv', 'w'))
writer.writerows(b)
Run Code Online (Sandbox Code Playgroud) 我想从文件的时间戳中减去n天,但它似乎不起作用.我看过这篇文章,我觉得我很接近.
这是我的代码的摘录:
import os, time
from datetime import datetime, timedelta
def processData1( pageFile ):
f = open(pageFile, "r")
page = f.read()
filedate = time.strftime('%m/%d/%Y', time.gmtime(os.path.getmtime(pageFile)))
print filedate
end_date = filedate - datetime.timedelta(days=10)
print end_date
Run Code Online (Sandbox Code Playgroud)
打印filedate有效,因此可以从文件中正确读取日期.这是减法位似乎没有用.
期望的输出:如果filedate是06/11/2013,print end_date应该屈服06/01/2013.
我有一个工作代码打开一个文件,查找一个字符串,并打印该行,如果它包含该字符串.我这样做是为了让我可以手动决定是否应该从我的数据集中删除该行.
但是如果我能告诉程序读取包含两个逗号之间的字符串的行部分会更好.
我现在的代码(见下文)
with open("dvd.txt") as f:
for num, line in enumerate(f, 1):
if " arnold " in line:
num = str(num)
print line + '' + num
Run Code Online (Sandbox Code Playgroud)
打印每一行如下:
77.224998664,2014-10-19,386.5889,the best arnold ***** ,81,dvd-action,Cheese 5gr,online-dvd-king93,0.19976,18,/media/removable/backup/2014-10-19/all_items/cheese-5gr?feedback_page=1.html, ships from: Germany ships to: Worldwide ,2014-07-30,online-dvd-king,93 1
Run Code Online (Sandbox Code Playgroud)
我希望它能打印出来:
,the best arnold ***** , 1
Run Code Online (Sandbox Code Playgroud)
要么
the best arnold ***** 1
Run Code Online (Sandbox Code Playgroud)
我读过这个问题,但我希望避免使用CSV.
如果出于某种原因比较难找到任何其他特定字符逗号之间的文本,或者,它会是以前,我期待的字符串后打印3个字是有用的.