Я собираю на сайте amazon.com некоторые данные.
Я использую Beautifulsoup и Multiprocessing with python 3.
Мой скрипт работает и возвращает нужные мне данныеОднако мой вопрос:
Какой самый лучший, самый безопасный и самый «питонический» способ убедиться, что я не пропускаю никаких данных при разборе с Beautifulsoup?
Оболочка Я добавляю time.sleep () в какую-то конкретную позицию?это будет иметь какое-то значение?Или, возможно, изменить с «lxml» на «html5lib»?Я уже прочитал вопросы: здесь , но все еще не уверен, что лучше.
Вот мой код:
import requests, random, time, gc
from bs4 import BeautifulSoup
from multiprocessing import Pool
def get_it_boy(item):
keyword, file_name, url, process_number = item
header_dict_base = {'User-Agent': ''}
headers_list = ['Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.107 Safari/534.13 v1416664997.4379','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24']
header_selected = random.choice(headers_list)
header = {'User-Agent': header_selected}
while True:
try:
username = 'XXXXX'
password = 'XXXXX'
proxy = f'http://{username}:{password}@XXX.XXX.XXXXXXX.com:20000'
response = requests.get(url, headers=header, proxies={'http': proxy, 'https': proxy}, timeout=(3, 3))
response_code = response.status_code
if response_code != 200:
print('Bad request!',response_code)
pass
else:
htmlText = response.text
# Shell I add something here? Adding time.sleep() will change anything for the parse?
soup = BeautifulSoup(htmlText,'lxml') # Shell I change the lxml?
with open('path' + file_name, 'a',encoding='utf-8') as data_file:
data_file.write(str(item)+ '\n')
for div in soup.select('div_i_am_looking_for_or_element'):
data = 'div_i_am_looking_for_or_element'
data_file.write(str(data).strip())
data_file.write('\n')
print(process_number,keyword,'All Data Saved!')
break
except:
time.sleep(1)
print('Testing with new proxy',keyword)