Удостоверьтесь, что не пропускаете никаких данных при разборе Beautiful-soup с Multiprocessing with python - PullRequest
0 голосов
/ 23 сентября 2019

Я собираю на сайте 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)
...