前提・実現したいこと
プロキシリストからプロキシを回転させてアクセスしつつスレッド処理を行いたいです。
発生している問題・エラーメッセージ
エラーメッセージは表示されませんが、ソースコードのidsを次から次へと処理したいのに一つのことを16個(スレッド数)同じ内容で処理してしまいます。
該当のソースコード
Python3
1from concurrent.futures import ThreadPoolExecutor 2from bs4 import BeautifulSoup 3from mechanize import Browser 4import subprocess 5import requests 6import socks 7import socket 8import time 9import sys 10 11keywords_list = [""] 12regulation_list = [ 13 "", 14] 15 16 = [] 17 = [] 18 19with open("proxylist.txt") as f: 20 proxylist = f.read().splitlines() 21 22def get_proxies(): 23 proxies = proxylist 24 return proxies 25 26proxArr = get_proxies() 27 28def main(ids, retry=5): 29 30 for id in ids: 31 32 for proxy in proxArr: 33 34 proxies = {"http": proxy, "https": proxy} 35 36 res = requests.get("http://inet-ip.info/ip", proxies=proxies) 37 print("--------------------------------") 38 print() 39 print(res.text) 40 41 for i in range(retry): 42 43 try: 44 br = Browser() 45 br.set_handle_robots(False) 46 br.addheaders = [ 47 ("User-agent", "Opera/9.30 (Nintendo Wii; U; ; 2047-7; en)") 48 ] 49 br.set_proxies(proxies=proxies) 50 51 br.open( 52 "", timeout=10.0 53 ) 54 br.select_form(action="") 55 br[""] = id 56 br.submit() 57 58 html = BeautifulSoup(br.response().read(), "html.parser") 59 title = html.find("title").text 60 body = html.find("body").text 61 62 for keyword in keywords_list: 63 if keyword in title: 64 65 print("") 66 break 67 68 soupobject = BeautifulSoup(br.response().read(), "html.parser") 69 mailaddresses = soupobject.find_all("strong") 70 fullname = soupobject.find_all("b") 71 willwritedata = id 72 73 for mailaddress in mailaddresses: 74 willwritedata += "," + mailaddress.text 75 76 for fullname in fullname: 77 fullname = fullname.text 78 79 print(fullname) 80 print(willwritedata + "\n") 81 パスリセ.append(fullname + "," + willwritedata + "\n") 82 print("--------------------------------") 83 84 except KeyboardInterrupt: 85 print("強制終了") 86 87 with open(".txt", "w", encoding="utf-8") as f: 88 f.write("\n".join()) 89 90 with open(".txt", "w", encoding="utf-8") as f: 91 f.write("\n".join()) 92 93 print("\n終了") 94 input() 95 exit() 96 97 except TypeError: 98 for regulation in regulation_list: 99 if regulation in title: 100 print("") 101 print("--------------------------------") 102 pass 103 pass 104 break 105 106 else: 107 break 108 109 else: 110 print("5回試行しましたが実行できませんでした。") 111 112 with open(".txt", "w", encoding="utf-8") as f: 113 f.write("\n".join()) 114 115 with open(".txt", "w", encoding="utf-8") as f: 116 f.write("\n".join()) 117 118 print("\n終了") 119 input() 120 exit() 121 122 123with open("idlist.txt") as f: 124 ids = f.read().splitlines() 125 126threads = [] 127 128with ThreadPoolExecutor(max_workers=16) as pool: 129 threads = [br for br in pool.map(main, ids)] 130 131with open(".txt", "w", encoding="utf-8") as f: 132 f.write("\n".join()) 133with open(".txt", "w", encoding="utf-8") as f: 134 f.write("\n".join()) 135 136print("\n終了") 137input() 138
試したこと
threadingやasyncioに載せ換えてみたりなどを試しましたがまったく変わらずどこかしらを間違えているのですがいまいちわかりません...
また、いろいろな資料を見て回ったのですが同じことをスレッドで処理するというものが見つからずいまいちどこが悪いのかわからず質問させていただきました。
他にも自分の同じような似ているプログラムでは動いているのでそちらと比べて見たりなどをしましたがまったく見当がつきませんでした...
補足情報(FW/ツールのバージョンなど)
Python 3.8.2
あなたの回答
tips
プレビュー