У меня есть scrapy pulling данные с веб-страницы. Проблема, с которой я столкнулся, - это тянуть много пробелов, и я решил использовать .strip(), как это было предложено другими. Ive столкнуться с проблемой, хотяPython .strip() не сохраняет за пределами оператора if?
if a.strip():
print a
if b.strip():
print b
Returns:
a1
b1
.
.
.
Но это:
if a.strip():
aList.append(a)
if b.strip():
bList.append(b)
print aList, bList
возвращает это:
a1
b1
Im пытается имитировать пробельные, что я удалите с .strip() здесь, но вы получите t он указывает. По какой-то причине он добавляет пробелы в список, хотя я сказал это не делать. Я даже могу распечатать список в инструкции if, и он также отображается правильно, но по какой-то причине, когда я решаю распечатать за пределами операторов if, он не работает так, как я предполагал.
Вот весь мой код:
# coding: utf-8
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.exporter import CsvItemExporter
import re
import csv
import urlparse
from stockscrape.items import EPSItem
from itertools import izip
class epsScrape(BaseSpider):
name = "eps"
allowed_domains = ["investors.com"]
ifile = open('test.txt', "r")
reader = csv.reader(ifile)
start_urls = []
for row in ifile:
url = row.replace("\n","")
if url == "symbol":
continue
else:
start_urls.append("http://research.investors.com/quotes/nyse-" + url + ".htm")
ifile.close()
def parse(self, response):
f = open("eps.txt", "a+")
sel = HtmlXPathSelector(response)
sites = sel.select("//div")
# items = []
for site in sites:
symbolList = []
epsList = []
item = EPSItem()
item['symbol'] = site.select("h2/span[contains(@id, 'qteSymb')]/text()").extract()
item['eps'] = site.select("table/tbody/tr/td[contains(@class, 'rating')]/span/text()").extract()
strSymb = str(item['symbol'])
newSymb = strSymb.replace("[]","").replace("[u'","").replace("']","")
strEps = str(item['eps'])
newEps = strEps.replace("[]","").replace(" ","").replace("[u'\\r\\n","").replace("']","")
if newSymb.strip():
symbolList.append(newSymb)
# print symbolList
if newEps.strip():
epsList.append(newEps)
# print epsList
print symbolList, epsList
for symb, eps in izip(symbolList, epsList):
f.write("%s\t%s\n", (symb, eps))
f.close()
Вы должны делать 'bList.append (b.strip())' – karthikr
Что делает * документация * say ['strip'] (http://docs.python.org/2/library/string.html) делает? – user2864740
Строки неизменяемы; '.strip()' не может изменить значение, поэтому он возвращает * новый * удаленный строковый объект. –