如何使用硒的几个实例[python]

时间:2016-03-17 01:48:22

标签: python selenium web-scraping

我使用硒进行网页抓取,但速度太慢,所以我试图用它来加速它。

我想要完成的是:

1)创建instance_1
2)创建instance_2
3)在第一个实例中打开页面
什么都不做 4)在第一个实例中打开页面
保存第一个不确定的内容 5)在第一个实例中打开一个新页面 保存第二个实例的内容

这个想法是使用加载第一页的时间来打开第二页。

System, Version=2.1.0.0 ...

但是脚本正在等待第一页完全充电然后再打开下一页,这种方法也只限于同时页面

EDIT。

我对GIRISH RAMNANI的代码进行了以下更改

在函数

之外创建浏览器实例
links = ('https:my_page'+ '&LIC=' + code.split('_')[1] for code in data)

browser = webdriver.Firefox()
browser_2 = webdriver.Firefox()


first_link = links.next()
browser.get(first_link)
time.sleep(0.5)

for i,link in enumerate(links): 

        if i % 2:       # i starts at 0
            browser_2.get(link)
            time.sleep(0.5)
            try: 
                content = browser.page_source
                name = re.findall(re.findall('&LIC=(.+)&SAW',link)[0]
                with open(output_path  + name,'w') as output:
                    output.write((content_2))

                print 'error ' + str(i) 

        else:

            browser.get(link)
            time.sleep(0.5)
            try:
                content_2 = browser_2.page_source
                name = re.findall(re.findall('&LIC=(.+)&SAW',link)[0]
                with open(output_path  + name,'w') as output:
                    output.write((content ))

            except:
                print 'error ' + str(i) 

使用驱动程序和URL作为函数的输入

driver_1 = webdriver.Firefox()
driver_2 = webdriver.Firefox()
driver_3 = webdriver.Firefox()

drivers_instance = [driver_1,driver_2,driver_3]

使用zip函数

创建一对链接/浏览器
 def get_content(url,driver):    
    driver.get(url)
    tag = driver.find_element_by_tag_name("a")
    # do your work here and return the result
    return tag.get_attribute("href")

1 个答案:

答案 0 :(得分:2)

可以在此处使用concurrent.futures

from selenium import webdriver
from concurrent.futures import ThreadPoolExecutor

URL ="https://pypi.python.org/pypi/{}"

li =["pywp/1.3","augploy/0.3.5"]

def get_content(url):    
    driver = webdriver.Firefox()
    driver.get(url)
    tag = driver.find_element_by_tag_name("a")
    # do your work here and return the result
    return tag.get_attribute("href")


li = list(map(lambda link: URL.format(link), li ))


futures = []
with ThreadPoolExecutor(max_workers=2) as ex:
    for link in li:

        futures.append(ex.submit(get_content,link))

for future in futures:
    print(future.result())

请记住,Firefox的两个实例将启动。

注意:您可能希望使用无头浏览器,例如PhantomJs而不是firefox。