RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-235091

User New's questions

Martin Hope
User New
Asked: 2020-04-15 20:39:38 +0000 UTC

python scrapy 将多个页面的数据收集到一个字典中

  • 2

下午好,有一个网站的主页上有文章预告 - 这将是解析的起始页。从中,蜘蛛遍历文章页面并收集每篇文章的数据——作者、文章评级、出版日期等。这是我的蜘蛛做得很好。

import scrapy
from scrapy.spiders import Spider
from sxtl.items import SxtlItem
from scrapy.http.request import Request


class SxtlSpider(Spider):
    name = "sxtl"

    start_urls = ['some_site']


    def parse(self, response):

        list_of_stories = response.xpath('//div[@id and @class="storyBox"]')

        item = SxtlItem()

        for i in list_of_stories:

            pre_rating = i.xpath('div[@class="storyDetail"]/div[@class="stor\
                yDetailWrapper"]/div[@class="block rating_positive"]/span/\
                text()').extract()
            rating = float(("".join(pre_rating)).replace("+", ""))

            link = "".join(i.xpath('div[@class="wrapSLT"]/div[@class="title\
                Story"]/a/@href').extract())

            if rating > 6:
                yield Request("".join(link), meta={'item':item}, callback=\
                                                            self.parse_story)
            else:
                break

    def parse_story(self, response):

        item = response.meta['item']

        number_of_pages = response.xpath('//div[@class="pNavig"]/a[@href]\
                                        [last()-1]/text()').extract()

        if number_of_pages:
            item['number_of_pages'] = int("".join(number_of_pages))
        else:
            item['number_of_pages'] = 1

        item['date'] = "".join(response.xpath('//span[@class="date"]\
                                                /text()').extract()).strip()
        item['author'] = "".join(response.xpath('//a[@class="author"]\
                                                /text()').extract()).strip()
        item['text'] = response.xpath('//div[@id="storyText"]/div\
                [@itemprop="description"]/text() | //div[@id="storyText"]\
                        /div[@itemprop="description"]/p/text()').extract()
        item['list_of_links'] = response.xpath('//div[@class="pNavig"]\
                                            /a[@href]/@href').extract()

        yield item

在这种情况下,一切顺利,但我们只有所有文章的第一页。但是...问题是几乎每篇文章在其他页面上都有续篇,即。有指向文章第 2、3、4、5 页的链接。问题来了。我将 yield item 更改为此:

yield Request("".join(item['list_of_links'][0]), meta={'item':item}, \
                                                callback=self.get_text)


def get_text(self, response):

    item = response.meta['item']

    item['text'].extend(response.xpath('//div[@id="storyText"]/div\
        [@itemprop="description"]/text() | //div[@id="storyText"]\
                /div[@itemprop="description"]/p/text()').extract())

    yield item

蜘蛛转到文章的下一页,但他已经在随机雕刻第二页了。那些。他可以将第 1 篇文章的第 2 页添加到第 5 篇文章的第 1 页。第3条第2页,附于第9条首页。

请告诉我,如果需要在一个项目中收集的信息位于站点的多个页面上,如何解析站点?(就我而言,如何确保来自不同项目的数据不会相互混合)?

提前致谢。

python
  • 1 个回答
  • 10 Views
Martin Hope
User New
Asked: 2020-03-14 21:23:43 +0000 UTC

python如何给程序添加定时器

  • 1

下午好。有一个用 python3 编写的程序,带有 PyQt5 图形界面。它有许多不同的模块和功能。到目前为止,一切都在一个线程中运行,即 没有子进程和多进程。该程序有一个启动器:

if __name__ == '__main__':
    Base.start_base()
    app = QApplication(sys.argv)
    form = Ui_Form()
    Ui_Form.user_pass(form)
    form.show()
    sys.exit(app.exec_())

然后,在程序本身中已经有(据我所知)一块 (module def retranslateUi(self, Form): ),其中程序旋转一圈并等待 GUI 中的按键:

        self.Begin.clicked.connect(self.choice)
        self.Clr_mes.clicked.connect(self.clear)
        self.radio_print_user_base.clicked.connect(self.print_userbase)
        self.Foto_Rate.clicked.connect(self.download_fotorating)
        self.Fotorate_folder_btn.clicked.connect(self.fotorate_folder)

在我看来,她在这里旋转,她实际上是如何抓住这些压力的——我不知道。

实际上,问题是:如何向程序添加一个计时器来跟踪时间,比如说,每 10 分钟它将启动一个程序模块(模拟 GUI 中的击键以启动所需模块)?我会澄清:扣上钥匙,启动模块,模拟按下 - 我可以。我不明白如何启动计时器以及在何处输入计时器,这将与程序同时工作,无论它当前正在做什么以及在那里按下了什么。

PS 我试着玩了一下multiprocessing模块,把breakdown放到processes下if __name__ == '__main__':,但是simultaneity不行,processes还是轮流执行,其中一个挂了很久(比如画界面就挂了并且有一个白色的空窗口),等待它完成另一个工作。也许他只是做错了。

python
  • 2 个回答
  • 10 Views
Martin Hope
User New
Asked: 2020-03-12 20:19:44 +0000 UTC

RE - 正则表达式 - 如何更改搜索顺序

  • 0
import re

stroka="start_dfd8357dfd_stop_dlfjdsf_start_kljf8998_stop_sfsdjflkjf_start_fjslkdjfdls_stop"

t=re.findall(r'start(.*)stop', stroka)
print (t)

字符串中stroka有三组start- stop。我想在它们之间拉出三个序列:第一个起停之间、第二个起停之间以及第三个起停之间。

但re它的逻辑略有不同。他start从头开始找,然后从头开始找stop,找到最后一个!

是否有一些参数说re开始后应该寻找最近的 next stop,而不是从最后看。

现在我得到了结果:

['_dfd8357dfd_stop_dlfjdsf_start_kljf8998_stop_sfsdjflkjf_start_fjslkdjfdls_']

我想收到:

['_dfd8357dfd_', '_kljf8998_', '_fjslkdjfdls_']
python
  • 1 个回答
  • 10 Views
Martin Hope
User New
Asked: 2020-02-07 07:22:32 +0000 UTC

sublime text 3 和俄语

  • 2

问题很简单:如何让ST3正常打印俄文字母?

这是一个示例程序:

print ('1')
print ('re')
print ('2')
print ('я печатаю')
print ('3')
print ('print')

像这样执行时,我得到:

在此处输入图像描述

那些。不仅俄文丢失了,邻近的英文也丢失了。

如果我用俄文注释掉一行,我会得到一个完整的工作程序: 在此处输入图像描述

这里是这样一个莫名其妙的垃圾。((( 此外,不可能得出一种模式,即在存在俄语行的情况下会丢失多少行和哪些行。有时只有俄语行会消失。有时 - 另外 1,2,3,4 个相邻的英语行。但如果程序中没有俄语输出,那么一切都会完整打印,没有故障和问题。

PS 我必须马上说:在顶部添加一个骰子

# -*- coding: utf-8 -*-

没有帮助。

python
  • 2 个回答
  • 10 Views
Martin Hope
User New
Asked: 2020-02-01 02:21:34 +0000 UTC

为什么需要装饰器?(不是他们如何工作,而是为什么)

  • 10

为什么需要装饰器?

谁看过关于装饰器的经典解释:

# Декоратор - это функция, ожидающая ДРУГУЮ функцию в качестве параметра
def my_shiny_new_decorator(a_function_to_decorate):
    # Внутри себя декоратор определяет функцию-"обёртку".
    # Она будет (что бы вы думали?..) обёрнута вокруг декорируемой,
    # получая возможность исполнять произвольный код до и после неё.

    def the_wrapper_around_the_original_function():
        # Поместим здесь код, который мы хотим запускать ДО вызова
        # оригинальной функции
        print "Я - код, который отработает до вызова функции"

        # ВЫЗОВЕМ саму декорируемую функцию
        a_function_to_decorate()

        # А здесь поместим код, который мы хотим запускать ПОСЛЕ вызова
        # оригинальной функции
        print "А я - код, срабатывающий после"

    # На данный момент функция "a_function_to_decorate" НЕ ВЫЗЫВАЛАСЬ НИ РАЗУ

    # Теперь, вернём функцию-обёртку, которая содержит в себе
    # декорируемую функцию, и код, который необходимо выполнить до и после.
    # Всё просто!
    return the_wrapper_around_the_original_function

# Представим теперь, что у нас есть функция, которую мы не планируем больше трогать.
def a_stand_alone_function():
    print "Я простая одинокая функция, ты ведь не посмеешь меня изменять?.."

a_stand_alone_function()
# выведет: Я простая одинокая функция, ты ведь не посмеешь меня изменять?..

# Однако, чтобы изменить её поведение, мы можем декорировать её, то есть
# Просто передать декоратору, который обернет исходную функцию в любой код,
# который нам потребуется, и вернёт новую, готовую к использованию функцию:

a_stand_alone_function_decorated = my_shiny_new_decorator(a_stand_alone_function)
a_stand_alone_function_decorated()
#выведет:
# Я - код, который отработает до вызова функции
# Я простая одинокая функция, ты ведь не посмеешь меня изменять?..
# А я - код, срабатывающий после

接下来是一段话:

可能现在我们希望每次调用 a_stand_alone_function 时,调用 a_stand_alone_function_decorated。没有什么比这更简单的了,只需用 my_shiny_new_decorator 返回给我们的函数覆盖 a_stand_alone_function 即可:

a_stand_alone_function = my_shiny_new_decorator(a_stand_alone_function)
a_stand_alone_function()
#выведет:
# Я - код, который отработает до вызова функции
# Я простая одинокая функция, ты ведь не посмеешь меня изменять?..
# А я - код, срабатывающий после

那些。在这段之后 - 我们失去了以原始形式调用函数的机会。现在它总是装饰。

问题是,为什么那时需要装饰器?

1)为什么不(如果我们无论如何都失去了原来的功能)只是重写原来的功能?(只需在函数的开头和结尾添加我们需要的代码片段)。像这样:

def a_stand_alone_function():
    print "Я - код, который отработает до вызова функции"
    print "Я простая одинокая функция, ты ведь не посмеешь меня изменять?.."
    print "А я - код, срабатывающий после"

或者,如果附加代码很大并且应该单独保存,那么:

def a_stand_alone_function():
        pre_function()
        print "Я простая одинокая функция, ты ведь не посмеешь меня изменять?.."
        post_function()

2)为什么所有这些混乱,而不是像问题 1 那样提出一个简单的解决方案?

3)如果可以同时调用装饰函数和原始函数,我也会理解装饰器。但是用@写的装饰器不允许这样。为什么装饰器会覆盖原来的功能?

我将非常感谢您提供解释的答案,也许还有来自实际实践的清晰示例。

python
  • 3 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5