Я пытаюсь очистить содержимое от this page, см. Код ниже. Мне любопытно, однако, как будто я запускаю код повторно, я продолжаю получать другой список мест работы (и, следовательно, обзоры), хотя отображаемая страница в моем браузере такая же. . Первая итерация правильная, но второй раз запускается сценарий с тем же стартовым URL-адресом, из списка выходят местоположения «University Village» и «Remote Telework» (и «San Salvador» и «Atlanta», так что список имеет одинаковую длину).Скребок с Beautifulsoup - содержимое отличается от отображаемой страницы
Насколько я вижу, нет «скрытого» текста, т.е. все они должны быть видны (и находятся на первой итерации). Что происходит? Как я могу получить все содержимое (мне нужно повторить несколько тысяч страниц, поэтому я не хочу вручную перебирать данные).
This question связан, но я не думаю, что это проблема IP здесь, так как я могу получить отображаемый контент на первой итерации.
Отредактировано для добавления: код действительно пропускает некоторые обзоры, даже если они идентифицированы, насколько я могу видеть, точно так же, как те, которые код подбирает.
Вот код (упрощенный):
list_url= ["http://www.indeed.com/cmp/Microsoft/reviews?fcountry=ALL"]
for url in list_url:
base_url_parts = urllib.parse.urlparse(url)
while True:
raw_html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(raw_html,"lxml")
review_tag={'class':re.compile("cmp-review-container")}
reviews=soup.find_all(attrs=review_tag)
job_locations=[]
for r in reviews:
if r.find(attrs={'class':"cmp-reviewer-job-location"}) != None:
job_location=r.find(attrs={'class':"cmp-reviewer-job-location"}).get_text().strip().encode('utf-8')
else:
job_location = "."
job_locations.append(job_location)
#Zip the data and write the observations to the CSV file
try:
last_link = soup.find('div', id='company_reviews_pagination').find_all('a')[-1]
if last_link.text.startswith('Next'):
next_url_parts = urllib.parse.urlparse(last_link['href'])
url = urllib.parse.urlunparse((base_url_parts.scheme, base_url_parts.netloc,
next_url_parts.path, next_url_parts.params, next_url_parts.query,
next_url_parts.fragment))
print(url)
else:
break
except:
break
csvfile.close()
PS. Извините, если это не подходящее место для размещения этого вопроса; сообщите мне о более подходящем месте в этом случае.
Спасибо. Есть ли способ использовать CasperJS для открытия и чтения URL-адреса, но сохранить обработку на основе beautifulsoup? Или я получу те же самые результаты, если бы я использовал ghost.py (снова сохраняя основную часть кода без изменений)? Я начинаю и начинаю все, ммм, запугиваю? :) –
Hi anne_t, на мой взгляд, общий способ использования bs и casperjs вместе - использовать один процесс (например, Popen) для вызова сценария casperjs внутри вашей py и использовать bs для обработки html, загружаемого casperjs. Кроме того, я редактирую свой ответ и включаю ссылку с PhantomJS и bs вместе. Я не уверен в части ghost.py, я не занимался этим раньше :) – linpingta
Спасибо! Я обязательно посмотрю! –