Advertisement
Guest User

parse_psv

a guest
Apr 23rd, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.80 KB | None | 0 0
  1. from bs4 import BeautifulSoup
  2. from fake_useragent import UserAgent
  3. import ssl
  4. import OpenSSL
  5. import asyncio
  6. import aiohttp
  7. from aiosocksy import Socks5Auth
  8. from aiosocksy.connector import ProxyConnector, ProxyClientRequest
  9.  
  10. proxies = []
  11. headers = {}
  12. cities = ['city1', 'city2', 'city3']
  13. categories = ['cat1', 'cat2', 'cat3']
  14. targets = []
  15.  
  16. #Подставляем заголовки
  17. def get_headers():
  18.     global headers
  19.     headers = {'User-Agent': str(ua.chrome)}
  20.     return headers
  21.  
  22. #Собираем список прокси
  23. def get_proxy():
  24.     global proxies
  25.     r = requests.get('https://api.proxyscrape.com/?request=getproxies&proxytype=socks5&timeout=10000&country=all&uptime=0')
  26.     rows = r.text.split(u'\r\n')
  27.     for row in rows:
  28.         #print(row)
  29.         if not row in proxies:
  30.             proxies.append(row)
  31.     print('Количество прокси:', len(proxies))
  32.  
  33. #Выбираем прокси из списка
  34. def set_proxy():
  35.     global proxy, proxies
  36.     if len(proxies) < 5:
  37.         get_proxy()
  38.         print('ЗАПРОШЕНЫ НОВЫЕ ПРОКСИ', len(proxies))
  39.     proxy = proxies[0]
  40.     try:
  41.         r = requests.get('https://ya.ru', headers=get_headers(), proxies={'https': 'socks5h://' + proxy, 'http': 'socks5h://' + proxy}, timeout=3)
  42.         soup = BeautifulSoup(r.content, 'html.parser')
  43.         title = soup.find('title')
  44.         if '— Яндекс' in title.text:
  45.             return proxy
  46.         else:
  47.             proxies.remove(proxy)
  48.             set_proxy()
  49.     except Exception as e:
  50.         proxies.remove(proxy)
  51.         set_proxy()
  52.        
  53. get_proxy()
  54. ua = UserAgent()
  55.  
  56. async def fetch(client, city):
  57.     for category in categories:
  58.         async with client.get('category', headers=get_headers(), proxy='socks5://'+str(set_proxy())) as a:
  59.             soup = await a.read()
  60.             soup = BeautifulSoup(soup, 'html.parser')
  61.             new_links = soup.find_all('a', class_='mylink')
  62.             for new_link in new_links:
  63.                 async with client.get(new_link, headers=get_headers(), proxy='socks5://'+str(set_proxy())) as b:
  64.                     soup = await b.read()
  65.                     soup = BeautifulSoup(soup, 'html.parser')
  66.                     new_new_links = soup.find_all('a', class_='mylink2')
  67.                     for new_new_link in new_new_links:
  68.                         async with client.get(new_link, headers=get_headers(), proxy='socks5://'+str(set_proxy())) as c:
  69.                             soup = await c.read()
  70.                             soup = BeautifulSoup(soup, 'html.parser')
  71.                             info = soup.find('span', class_='myinfo')
  72.                             targets.append(info)
  73.                            
  74.  
  75. async def main():
  76.     """
  77.    Создает группу сопрограмм и ожидает их завершения
  78.    """
  79.     # создаем экземпляр клиента
  80.     connector = ProxyConnector()
  81.     async with aiohttp.ClientSession(connector=connector, request_class=ProxyClientRequest) as client:
  82.  
  83.         # создаем корутины
  84.         coroutines = [fetch(client, city) for city in cities]
  85.         # ожидаем выполнения всех корутин
  86.         completed, pending = await asyncio.wait(coroutines)
  87.         # итерация по завершенным результатам
  88.         for item in completed:
  89.             print('Город готов')
  90.  
  91. if __name__ == '__main__':
  92.  
  93.     # получаем экзепляр цикла событий
  94.     event_loop = asyncio.get_event_loop()
  95.  
  96.     try:
  97.  
  98.         # запуск цикла  обработки событий
  99.         event_loop.run_until_complete(main(cities))
  100.  
  101.     finally:
  102.         # обязательно закрываем
  103.         event_loop.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement