小编Ste*_*oth的帖子

使用Python从一个文本文件复制到另一个文本文件

我想将某些文本文件从一个文本文件复制到另一个文本文件.在我当前的脚本中,当我搜索字符串后,它会复制所有内容,如何复制文本的某个部分?例如,当它中有"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)

python text-files

26
推荐指数
4
解决办法
14万
查看次数

如何使用scrapy中的CrawlSpider点击一个带有javascript onclick的链接?

我希望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请求.它们交替使用两种类型的请求:粘贴一些数据,然后单击"下一步"转到下一页.

javascript python onclick scrapy web-scraping

24
推荐指数
1
解决办法
1万
查看次数

Scrapy:如何从spider_idle事件回调中手动插入请求?

我创建了一个蜘蛛,并将方法链接到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而不需要额外的努力.>>

python scrapy

11
推荐指数
1
解决办法
2917
查看次数

为什么属性装饰器显示"对象没有属性"?

我有以下代码:

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 pyqt4 python-decorators

6
推荐指数
1
解决办法
3089
查看次数

无法更改Scrapy设置

我想用中文下载页面,所以我打开了命令行和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个小时但却一无所获.非常感谢!

settings scrapy

5
推荐指数
1
解决办法
819
查看次数

如何删除Scrapy蜘蛛数据中的空白区域

我正在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 web-scraping

5
推荐指数
2
解决办法
5329
查看次数

如何将参数传递给scrapyd的scrapy crawler?

我可以用简单的命令在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)

python scrapy scrapyd

5
推荐指数
1
解决办法
1011
查看次数

如何使用python从文件中复制特定数据?

我有一些大型数据文件,我想复制每行的某些数据,基本上是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)

python

2
推荐指数
1
解决办法
152
查看次数

Scrapy / Python从收益请求中获取项目

我正在尝试请求多个页面,并将从回调返回的变量存储到列表中,该列表将在以后的请求中使用。

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)

如何做到这一点?

元数据无济于事。他们输入的不是输出值,我想从请求循环中收集值。

python scrapy

2
推荐指数
1
解决办法
1159
查看次数

使用lambda从头开始删除列表条目

我有来自网站的面包屑,我想从一开始就用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 python-2.7

1
推荐指数
1
解决办法
51
查看次数