Я пишу многопроцессорный веб-браузер, который извлекает информацию с веб-сайтов и записывает ее. Цель этого кода - создавать локальные файлы на моем компьютере, отражающие содержимое веб-страницы, создавать историю твитов, постов или статей. Моя цель - запустить эту программу в цикле, проверяя серию веб-страниц на предмет новой информации каждую минуту или около того.
Если я запускаю свой код, я получаю всю информацию, которую ищу, сохраняю, и для всех моих первоначальных целей мой код работает.
Однако я сталкиваюсь с чем-то, что не могу объяснить. По какой-то причине, когда я запускаю свой код, он собирает большую часть информации, которую я ищу на первой итерации цикла, и оставшуюся информацию на последующих итерациях.
Данные, которые я пропускаю в первом цикле, никогда не согласуются от одной «первой попытки» до следующей, то есть, даже если я удаляю все свои файлы и проверяю снова, я получаю большинство данных, которые я ищу, но оставленные фрагменты взяты с совершенно разных веб-сайтов, чем отсутствующие фрагменты из предыдущей попытки.
Мне потребовалось целых 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()