我想将某些文本文件从一个文本文件复制到另一个文本文件.在我当前的脚本中,当我搜索字符串后,它会复制所有内容,如何复制文本的某个部分?例如,当它中有"tests/file/myword"时只复制行?
当前代码:
#!/usr/bin/env python
f = open('list1.txt')
f1 = open('output.txt', 'a')
doIHaveToCopyTheLine=False
for line in f.readlines():
if 'tests/file/myword' in line:
doIHaveToCopyTheLine=True
if doIHaveToCopyTheLine:
f1.write(line)
f1.close()
f.close()
Run Code Online (Sandbox Code Playgroud) 我希望scrapy抓取页面,进入下一个链接看起来像这样:
<a href="#" onclick="return gotoPage('2');"> Next </a>
Run Code Online (Sandbox Code Playgroud)
scrapy能解释那个javascript代码吗?
通过livehttpheaders扩展,我发现单击Next会生成一个POST,其中包含一个非常大的"垃圾",如下所示:
encoded_session_hidden_map=H4sIAAAAAAAAALWZXWwj1RXHJ9n
Run Code Online (Sandbox Code Playgroud)
我正在尝试在CrawlSpider类上构建我的蜘蛛,但我无法弄清楚如何对它进行编码,BaseSpider我使用该parse()方法处理第一个URL,这恰好是一个登录表单,我在其中执行了一个POST:
def logon(self, response):
login_form_data={ 'email': 'user@example.com', 'password': 'mypass22', 'action': 'sign-in' }
return [FormRequest.from_response(response, formnumber=0, formdata=login_form_data, callback=self.submit_next)]
Run Code Online (Sandbox Code Playgroud)
然后我定义了submit_next()来告诉下一步该做什么.我无法弄清楚如何告诉CrawlSpider在第一个URL上使用哪种方法?
我抓取的所有请求(第一个除外)都是POST请求.它们交替使用两种类型的请求:粘贴一些数据,然后单击"下一步"转到下一页.
我创建了一个蜘蛛,并将方法链接到spider_idle事件.
如何手动添加请求?我不能只从parse返回项目 - 在这种情况下解析没有运行,因为已经解析了所有已知的URL.我有一个生成新请求的方法,我想从spider_idle回调运行它来添加创建的请求.
class FooSpider(BaseSpider):
name = 'foo'
def __init__(self):
dispatcher.connect(self.dont_close_me, signals.spider_idle)
def dont_close_me(self, spider):
if spider != self:
return
# The engine instance will allow me to schedule requests, but
# how do I get the engine object?
engine = unknown_get_engine()
engine.schedule(self.create_request())
# afterward, ensure we stay alive by raising DontCloseSpider
raise DontCloseSpider("..I prefer live spiders.")
Run Code Online (Sandbox Code Playgroud)
更新: 我已经确定我可能需要这个ExecutionEngine对象,但我并不知道如何从蜘蛛中获取它,尽管它可以从一个Crawler实例获得.
更新2: ..谢谢...crawler作为超类的属性附加,所以我可以使用self.crawler而不需要额外的努力.>>
我有以下代码:
import sys
import platform
from PyQt4.QtGui import QApplication
from PyQt4.QtWebKit import QWebPage
class Render(QWebPage):
def __init__(self):
self.app = QApplication([])
QWebPage.__init__(self)
@property
def html(self):
return self.mainFrame().toHtml.toAscii()
page = Render()
print sys.version, platform.platform()
print 'html attribute?', [p for p in dir(page) if 'html' in p]
print page.html
Run Code Online (Sandbox Code Playgroud)
给出这个异常输出:
stav@maia:$ python property.py
2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] Linux-3.2.0-38-generic-x86_64-with-Ubuntu-12.04-precise
html attribute? ['html']
Traceback (most recent call last):
File "property.py", line 18, in <module>
print page.html
AttributeError: 'Render' object has no …Run Code Online (Sandbox Code Playgroud) 我想用中文下载页面,所以我打开了命令行和python,并输入了这些代码
from scrapy.conf import settings
settings.overrides['DEFAULT_REQUEST_HEADERS'] = {'Accept':'text/heml,application/xhtml+xml;q=0.9,*/*;q=0.8','Accept-Language':'ch',}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.'Accept-Language'仍然是'en'.所以我尝试了其他设置,同样的事情发生了.我只是无法改变设置.有人帮助我,它让我发疯!我花了3个小时但却一无所获.非常感谢!
我正在Scrapy中编写我的第一个蜘蛛,并尝试按照文档进行操作.我已经实现了ItemLoaders.蜘蛛提取数据,但数据包含许多行返回.我已经尝试了很多方法来删除它们,但似乎没有任何工作.replace_escape_chars实用程序应该可以工作,但我无法弄清楚如何使用它ItemLoader.也有些人使用(unicode.strip),但同样,我似乎无法让它工作.有些人试图在items.py和蜘蛛中的其他人中使用这些.如何清除这些换行数据(\ r \n)?我的items.py文件只包含项目名称和字段().蜘蛛代码如下:
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.loader import XPathItemLoader
from scrapy.utils.markup import replace_escape_chars
from ccpstore.items import Greenhouse
class GreenhouseSpider(BaseSpider):
name = "greenhouse"
allowed_domains = ["domain.com"]
start_urls = [
"http://www.domain.com",
]
def parse(self, response):
items = []
l = XPathItemLoader(item=Greenhouse(), response=response)
l.add_xpath('name', '//div[@class="product_name"]')
l.add_xpath('title', '//h1')
l.add_xpath('usage', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl00_liItem"]')
l.add_xpath('repeat', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl02_liItem"]')
l.add_xpath('direction', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl03_liItem"]')
items.append(l.load_item())
return items
Run Code Online (Sandbox Code Playgroud) 我可以用简单的命令在scrapy中运行蜘蛛
scrapy crawl custom_spider -a input_val=5 -a input_val2=6
在哪里input_val,input_val2我正在传递给蜘蛛的价值观
以上方法工作正常..
但是在安排带有scrapyd的蜘蛛时
赛跑
curl http://localhost:6800/schedule.json -d project=crawler -d input_val=5 -d input_val2=6 -d spider=custom_spider
Run Code Online (Sandbox Code Playgroud)
引发错误
spider = cls(*args, **kwargs)
exceptions.TypeError: __init__() got an unexpected keyword argument '_job'
Run Code Online (Sandbox Code Playgroud)
我如何让这个工作?
编辑 此:在我的初始化程序中:
def __init__(self,input_val=None, input_val2=None, *args, **kwargs):
self.input_val = input_val
self.input_val2 = input_val2
super(CustomSpider, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud) 我有一些大型数据文件,我想复制每行的某些数据,基本上是ID代码.ID代码|在一侧有一个空间,在另一侧有空间.我想知道是否可以提取ID.我还有两个数据文件,一个每行有4个ID码,另一个每行有23个.
目前我正在考虑从数据文件中复制每一行,然后相互减去字符串以获得所需的ID代码,但肯定必须有一个更简单的方法!救命?
以下是我正在使用的数据文件中的一行示例
cluster8032: WoodR1|Wood_4286 Q8R1|EIK58010 F113|AEV64487.1 NFM421|PSEBR_a4327
Run Code Online (Sandbox Code Playgroud)
从这一行我想要在单独的行上输出
Wood_4286
EIK58010
AEV644870.1
PSEBR_a4327
Run Code Online (Sandbox Code Playgroud) 我正在尝试请求多个页面,并将从回调返回的变量存储到列表中,该列表将在以后的请求中使用。
def parse1(self,response):
items.append(1)
def parse2(self,response):
items=[]
urls=['https://www.example1.com','https://www.example2.com']
for url in urls:
yield Request(
url,
callback=self.parse1,
dont_filter=True
)
print items
Run Code Online (Sandbox Code Playgroud)
如何做到这一点?
元数据无济于事。他们输入的不是输出值,我想从请求循环中收集值。
我有来自网站的面包屑,我想从一开始就用lambda表达式删除所有"Home"条目.
就像是:
lambda v: v[1:] if v and v[0] == 'Home' else v
Run Code Online (Sandbox Code Playgroud)
但我想删除倍数,而不仅仅是第一个,并且只从头开始,所以:
['Home', 'Home', 'Home and Garden', 'Home', 'Kitchen']
Run Code Online (Sandbox Code Playgroud)
变为:
['Home and Garden', 'Home', 'Kitchen']
Run Code Online (Sandbox Code Playgroud) python ×8
scrapy ×6
web-scraping ×2
javascript ×1
onclick ×1
pyqt4 ×1
python-2.7 ×1
scrapyd ×1
settings ×1
text-files ×1