Source code for proxypool.utils
import requests
import lxml
import asyncio
import time
import aiohttp
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8'
}
[docs]def get_page(url):
r = requests.get(url, headers=headers)
try:
soup = BeautifulSoup(r.content.decode("utf-8"), 'lxml')
except UnicodeDecodeError:
soup = BeautifulSoup(r.text, 'lxml')
return soup
[docs]class Downloader(object):
"""
一个异步下载器,可以对代理源异步抓取,但是容易被BAN。
"""
def __init__(self, urls):
self.urls = urls
self._htmls = []
[docs] async def download_single_page(self, url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
self._htmls.append(await resp.text())
[docs] def download(self):
loop = asyncio.get_event_loop()
tasks = [self.download_single_page(url) for url in self.urls]
loop.run_until_complete(asyncio.wait(tasks))
@property
def htmls(self):
self.download()
return self._htmls