快速搜索1000个链接Python3

时间:2017-02-28 04:40:52

标签: python python-3.x

我试图创建一个搜索Imgur链接网址的程序,并保存由图像实际存在的指定字符列表组成的程序。我在链接中有6个100%的字母,我试图通过这6个字符+ 1个额外的未知字符(a到z,0到9)运行所有组合。
例如:www.imgur.com/gallery/BZmO8Ha

我想知道除了打开每堆少量字母的Python外壳之外,还有更快的方法吗?
继承了我目前的代码:

- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker {
    // your click action

    StringAddress =  marker.snippet;
    StringName = marker.title;

    NSInteger indexCheck = [NameHSArray indexOfObject:marker.title];
    NSLog(@"Curret Index =%ld",(long)indexCheck);

    StringName=[NSString stringWithFormat:@"%@",[NameHSArray objectAtIndex:indexCheck]];
    StringAddress=[NSString stringWithFormat:@"%@",[AddressHSArray objectAtIndex:indexCheck]];
    StringPhoneNo=[NSString stringWithFormat:@"%@",[PhoneNoHSArray objectAtIndex:indexCheck]];


    NSLog(@"Address=%@",StringAddress);
    NSLog(@"Name= %@",StringName);
    NSLog(@"Phone No =%@",StringPhoneNo);

    lblNamepopup.text=StringName;
    lblAddresspopup.text=StringAddress;
}

2 个答案:

答案 0 :(得分:3)

这真的很慢,因为你大部分时间都在等待来自imgur的回复。您可以通过将排列除以使用线程进行检查来加快速度,这样您就可以并行执行大量请求。更好的选择是使用asyncio / twisted / tornado / what进行异步编程。

另一个可能是最好的替代方案是使用 grequests ,这就像请求但是使用gevent异步:
https://github.com/kennethreitz/grequests

无论你选择什么,请确保以某种方式对请求进行评级限制,因为否则会对请求产生影响。

答案 1 :(得分:0)

所以有一件事情可以让它快得多,就是不要每次都打开并附加到文件中。

将其保存到内存中:

做这样的事情:

import requests
from itertools import permutations

letters = 'BZmO8H'
letter_list = 'abcdefghijklmnopqrstuvwxyz1234567890'

imgur_links = []

for letter in letter_list:
    new_list = letters+letter
    print(new_list)
    for per in permutations(new_list, 7):
        link = ''.join(per)
        print(link)
        r = requests.head("http://imgur.com/{}".format(link))
        print(r.status_code)
        if r.status_code == 200:
            imgur_links .append("www.imgur.com/gallery/{}\n".format(link))
            print("Image Found. Added to File")
        elif r.status_code == 404:
            print("No Image")
        else:
            print("ERROR, SOMETHING WENT WRONG")
file = open('links.txt', 'a')
file.write(imgur_links)
file.close()

这将最多加载36个图像,你也可能想要获得大写字符,这将使这总共62个应该非常快,你可以使用Asyncio或其他东西并行化请求,但是对于如此少的请求,它可能有点过分。