小编Exa*_*rph的帖子

Scrapy Splash截图?

我正在尝试抓取一个网站,同时截取每个页面的屏幕截图.到目前为止,我已经成功拼凑了以下代码:

import json
import base64
import scrapy
from scrapy_splash import SplashRequest


class ExtractSpider(scrapy.Spider):
    name = 'extract'

    def start_requests(self):
        url = 'https://stackoverflow.com/'
        splash_args = {
            'html': 1,
            'png': 1
        }
        yield SplashRequest(url, self.parse_result, endpoint='render.json', args=splash_args)

    def parse_result(self, response):
        png_bytes = base64.b64decode(response.data['png'])

        imgdata = base64.b64decode(png_bytes)
        filename = 'some_image.png'
        with open(filename, 'wb') as f:
            f.write(imgdata)
Run Code Online (Sandbox Code Playgroud)

它可以很好地进入网站(例如,stackoverflow)并返回png_bytes的数据,但是当写入文件时 - 返回一个损坏的图像(不加载).

有没有办法解决这个问题,或者找到更有效的解决方案?我已经读过Splash Lua Scripts可以做到这一点,但一直无法找到实现它的方法.谢谢.

python lua splash-screen scrapy

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

Win32API 鼠标与真正的鼠标点击

我最近开始使用 win32api 来模拟鼠标事件,并想知道它是否可以检测到?

例如,api 是否遵循与使用真实鼠标时完全相同的过程/运行完全相同的命令 - 或者是否存在一些可以检测到的细微差异?此外,这是否与 win32com SendKeys(通过 Shell Script/Python)相同?

我问,因为过去我有一些应用程序检测到 Java 机器人库 - 但是当使用 Python win32api 时,它们似乎都可以正常工作。谢谢。

python winapi

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

Scrapy - 删除重复项并将数据输出为单个列表?

我使用下面的代码来抓取页面上的多个链接,并从每个相应的链接中获取数据列表:

import scrapy

class testSpider(scrapy.Spider):
    name = "quotes"
    start_urls = ['http://www.website.com']

    def parse(self, response):
        urls = response.css('div.subject_wrapper > a::attr(href)').extract()
        for url in urls:
            url = response.urljoin(url)
            yield scrapy.Request(url=url, callback=self.getData)

    def getData(self, response):
        data = {'data': response.css('strong.data::text').extract()}
        yield data
Run Code Online (Sandbox Code Playgroud)

它工作正常,但由于它返回每个链接的数据列表,当我输出到 CSV 时,它看起来如下所示:

"dalegribel,Chad,Ninoovcov,dalegribel,Gotenks,sillydog22"

"kaylachic,jmargerum,kaylachic"

"Kempodancer,doctordbrew,Gotenks,dalegribel"

"Gotenks,dalegribel,jmargerum"

...
Run Code Online (Sandbox Code Playgroud)

是否有任何简单/有效的方法将数据输出为单个行列表而没有任何重复项(相同的数据可以出现在多个页面上),类似于以下内容?

dalegribel
Chad
Ninoovcov
Gotenks
...
Run Code Online (Sandbox Code Playgroud)

我尝试使用数组,然后循环每个元素来获取输出,但收到错误消息,指出yield 仅支持“Request、BaseItem、dict 或 None”。另外,由于我将运行大约 10k 个条目,因此我不确定将数据存储在数组中是否会减慢抓取速度。谢谢。

python scrapy

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

标签 统计

python ×3

scrapy ×2

lua ×1

splash-screen ×1

winapi ×1