我列出了大约80个需要获取HTML
的站点,然后在它们上使用XPath
。与此类似的疑问:How to Multi-thread an Operation Within a Loop in Python但问题本身是如何使请求遵守循环,我如何将它们放入def
内?
我尝试通过常规方法(例如几个request.get()
)来执行此操作,但这不是可行的方法,因为它需要大量时间才能完成所有请求...
我看上去this,但显然只是为了获取站点状态,并搜索其他链接,我发现this,但我听不懂
是否具有grequests方法,但它也仅获得状态?
我需要获取HTML
代码并将其保存在向量或变量中。
要使用xpath并将html转换为字符串,我正在考虑使用lxml
仅为您理解我所需要的示例(我将使用grequest
和lxml
方法来使它易于理解):
import grequest
from lxml import html
values = []
urls = [
'http://www.heroku.com',
'http://tablib.org',
'http://httpbin.org',
'http://python-requests.org',
'http://kennethreitz.com'
]
values[len(values)] = html.fromstring(grequests.get(u) for u in urls) #How retire the for?
if values[len(values)] == 1:
Value_Search_One = values[len(values)].xpath(xpath_one)
if values[len(values)] == 2:
Value_Search_Two = values[len(values)].xpath(xpath_two)
if values[len(values)] == 3:
Value_Search_Three = values[len(values)].xpath(xpath_three)
我知道这段代码中有很多错误,但是我只是想让您了解我需要查找的结果。
如您所见,我完全不知道该怎么做。如果有人可以帮助我用一种快速的方法将代码组合在一起以发出多个HTML请求,我将不胜感激。我读了很多东西,但是我不确定该怎么办。
注意:我接受的并不仅是我引用的链接的这些示例,如果有人知道任何更简单或更有用的方法,那么
*我正在使用python 3.4
答案 0 :(得分:0)
使用线程来执行多个进程,粗略的代码将是
import threading
my_threads={}
my_threads['request']=threading.Thread(target=request_url)
my_threads['request'].start()
其中request_url是一个函数。这只是如何创建和运行线程的示例。 在for循环上创建线程
import requests
def start_threads(urls):
#where urls will be tuple of urls you want to request
urlThreads=[]
for url in urls:
x=threading.Thread(target=request_individual,args=(url,))
x.start()
urlThreads.append(x)
time.sleep(5) #this one is optional, I made it so that it won't bottleneck my router.
def request_individual(url):
r=requests.get(url)
#do something