用Python在web浏览器中打开和处理URL的最快方法

用Python在web浏览器中打开和处理URL的最快方法,python,python-3.x,selenium-webdriver,web-scraping,beautifulsoup,Python,Python 3.x,Selenium Webdriver,Web Scraping,Beautifulsoup,使用Selenium包,我试图在浏览器中打开URL。浏览器可以是Firefox或Google。给定的URL被重定向到其他URL,浏览器必须等待,直到其URL发生更改。以下是我使用的代码: import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait starttime = time.time() browser = webdriver.Firefox(execu

使用
Selenium
包,我试图在浏览器中打开
URL
。浏览器可以是
Firefox
Google
。给定的
URL
被重定向到其他
URL
,浏览器必须等待,直到其
URL
发生更改。以下是我使用的代码:

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
starttime = time.time()
browser = webdriver.Firefox(executable_path='\\somepath\\chromedriver.exe')
browser.get("http://patft.uspto.gov/netacgi/nph-Parser?patentnumber=3,930,293")
wait = WebDriverWait(browser, 5)
wait.until(lambda driver: browser.current_url !=patent )
url = browser.current_url
r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')

for tag in soup.find_all(text=re.compile('Current U.S. Class:')):
    table = tag.findParent('table')
    result = table.find('tr').text
    browser.close()
    print(result)  # Current U.S. Class: 29/428 
    print(time.time() - starttime)

但是这需要花费太多的时间(比如18到20秒),我有一个巨大的URL数据集要处理。有没有更快的方法执行此任务?

查看原始URL的响应,它只包含指向新URL的HTML重定向:

<HTML>
<HEAD>
<TITLE>Single Document</TITLE>
<META HTTP-EQUIV="REFRESH" CONTENT="1;URL=/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=3,930,293.PN.&OS=PN/3,930,293&RS=PN/3,930,293">
</HEAD>
</HTML>
那就去吧。现在所有这些都可以通过请求来完成,所以您无需等待Selenium


以下是使用上述技巧后的代码:

import time, requests, re
from bs4 import BeautifulSoup
start_time = time.time()
root_url = "http://patft.uspto.gov"
r = requests.get(root_url + "/netacgi/nph-Parser?patentnumber=3,930,293")
r = requests.get(root_url + re.search('CONTENT="1;URL=(.+)"', r.text).group(1))

soup = BeautifulSoup(r.text, 'lxml')

for tag in soup.find_all(string='Current U.S. Class:'):
    table = tag.findParent('table')
    result = table.find('tr').text
    print(result)
    print(time.time() - start_time)
输出:

Current U.S. Class: 29/428; 28/284; 28/297; 8/155 
2.2239434719085693

好吧,这对我来说将是一个新的把戏我会寻找它,但你认为它会帮我吗?如果您提供任何代码示例@omareiasure,我将不胜感激。如果您能帮我解决这个问题,我将不胜感激。非常感谢@omareinea有一件事,所有URL都来自同一个网站吗?是的,所有URL都属于同一个“USPTO”网站@OmarEineaI只需更改上述URL中的这些
3930293
数字,即访问其他URL的@omareineat此代码对我的机器运行良好,但在虚拟机上的某些URL上会出现错误。错误是非类型对象没有属性组@奥马尔埃涅亚
Current U.S. Class: 29/428; 28/284; 28/297; 8/155 
2.2239434719085693