小编Pla*_*sky的帖子

使用 Python 在 Yandex 图像中反向搜索图像

我对自动化反向图像搜索感兴趣。Yandex 尤其适合捕杀鲶鱼,甚至比 Google 图片还要好。因此,请考虑以下 Python 代码:

import requests
import webbrowser

try:
    filePath = "C:\\path\\whateverThisIs.png"
    searchUrl = 'https://yandex.ru/images/'
    multipart = {'encoded_image': (filePath, open(filePath, 'rb')), 'image_content': ''}
    response = requests.post(searchUrl, files=multipart, allow_redirects=False)
    #fetchUrl = response.headers['Location']
    print(response)
    print(dir(response))
    print(response.content)
    input()
except Exception as e:
    print(e)
    print(e.with_traceback)
    input()```
Run Code Online (Sandbox Code Playgroud)

脚本失败并显示 KeyError,'location'未找到。我知道代码会起作用,因为如果您替换它searchUrlhttp://www.google.hr/searchbyimage/upload那么脚本会返回正确的 url。因此,简而言之,预期结果将是带有图像搜索的 url。实际上,我们得到了一个 KeyError ,该 url 应该存储在其中。显然,Yandex 的工作方式并不完全相同,可能 url 已关闭(尽管我尝试了大量变体)或者原因可能完全不同。

无论如何,非常感谢帮助解决这个问题!

python parsing web-crawler yandex

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

允许在函数定义的返回类型中定义结构有什么关系?(C)

最近我偶然发现了一些 C 代码,其中函数定义的返回类型本身就是一个结构体定义。例如,这个:

#include <stdio.h>

struct f {
    int a[25];       
    const char* ch;
} 
function(int h)
{
    printf("Passed: %d\n", h);
}

int main(int argc, char* argv[]) {
    printf("array at: %p ptr : %p\n", function(4).a, function(5).ch);
    int *ptr = function(6).a;
    for(int i = 0; i < 25; i++)
    {
      ptr[i] = i;
      printf("%d\n", ptr[i]);
    }
    puts("No segfaults.");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里自己测试。

我的问题是为什么会允许这样的事情?它实际上比定义struct正常有什么好处?你不能初始化变量,除非,我猜,你struct在函数内部创建一个,然后更改它的数据return。这是相当标准的票价,但问题是,clang 7.0.0您甚至不需要return任何东西!我认为void没有return语句的非函数是编译器错误(唯一的例外是main),但 …

c

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

取消引用自定义mem地址时的Segfault(C)

我想声明一个指针,让它保存一个自定义地址,然后为其赋值:

void main()
{
    char *ptr;
    ptr = (char *)0x123123; //the assignment works perfectly with a cast
    printf("%p\n", ptr); //and the pointer indeed holds the address it's supposed to
    *ptr = 'a'; //but this breaks
    puts("2");
}
Run Code Online (Sandbox Code Playgroud)

最初我认为原因是因为我试图取消引用未初始化的内存.但我确实怀疑是这种情况,因为这some_type *some_ptr = &some_variable;完美无瑕,所以交易必须是我指定的地址.

后来我想,以同样的方式3'a'或者"alpine"是常数,(char *) 0x123123必须是一个常量了.并且const-s不能在C中编辑,但仍然不能,因为尝试更改const值将无法编译.

第三个假设是这样的地址必须是不可用的,但这也没有意义,因为第4行总是工作,无论我给出的地址或类型pointer.

c memory pointers segmentation-fault memory-address

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