Цикл Webscraping не достигает URL каждой итерации - PullRequest
0 голосов
/ 27 апреля 2018

Я пишу многопроцессорный веб-браузер, который извлекает информацию с веб-сайтов и записывает ее. Цель этого кода - создавать локальные файлы на моем компьютере, отражающие содержимое веб-страницы, создавать историю твитов, постов или статей. Моя цель - запустить эту программу в цикле, проверяя серию веб-страниц на предмет новой информации каждую минуту или около того.

Если я запускаю свой код, я получаю всю информацию, которую ищу, сохраняю, и для всех моих первоначальных целей мой код работает.

Однако я сталкиваюсь с чем-то, что не могу объяснить. По какой-то причине, когда я запускаю свой код, он собирает большую часть информации, которую я ищу на первой итерации цикла, и оставшуюся информацию на последующих итерациях.

Данные, которые я пропускаю в первом цикле, никогда не согласуются от одной «первой попытки» до следующей, то есть, даже если я удаляю все свои файлы и проверяю снова, я получаю большинство данных, которые я ищу, но оставленные фрагменты взяты с совершенно разных веб-сайтов, чем отсутствующие фрагменты из предыдущей попытки.

Мне потребовалось целых 7 итераций цикла, прежде чем я прекратил получать новые данные, и, наконец, я завершил список своих старых сообщений.

Как будто моя программа будет посещать только часть URL-адресов, которые я в нее добавляю, и эта недостающая часть выбирается случайным образом. Это не имело бы никакого значения, и я не надеялся точно поставить отметку времени в этих сообщениях.

Я надеюсь, что один из вас скажет мне, что я пропустил, что заставляет мой код вести себя таким образом. Я бы хотел, чтобы каждая итерация моего кода проверяла каждый веб-сайт и записывала результаты.

Ниже приведен пример моего кода, дайте мне знать, если вы увидите, что я пропустил.

def gensoup(url):
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}
    r = requests.get(url, headers=headers)
    soup = bs.BeautifulSoup(r.content, 'lxml')
    return soup

def webscraper(url):
    soup = gensoup(url)

    for t in soup.find_all('THINGS TO FIND'}):
            DoScraping()

            IsNewUrl=checkfiles('SCRAPED HREF')
            if IsNewUrl = True
                RecordNewUrl('SCRAPED HREF')

def RecordNewUrl('SCRAPED HREF'):
    with open(filename, 'a') as f:
        f.write(SCRAPED HREF+'\n')

def webhandler(urls):
    for url in urls
        webscraper(url):


def get_chunks(input_list): #thanks to quamrana
    return [input_list[i:i+chunk_size] for i in range(0, len(input_list), 5)]

def startscraper():
    chunks = get_chunks(all_urls)
    processes = [mp.Process(target=webhandler, args=(chunk,)) for chunk in chunks] # Create processes, each taking a chunk and the queue            
    for p in processes: # Start them all
        p.start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...