#python #web-scraping #beautifulsoup
#python #веб-очистка #beautifulsoup
Вопрос:
Я собираю обзоры с веб-сайта, используя python и BeautifulSoup. Приведенный ниже код работает для очистки отзывов для всех компаний в моем примере, кроме McDonald’s. Когда я пытаюсь использовать приведенный ниже код, я получаю len_review = 0.
Есть идеи, что может вызвать проблему?
Спасибо!
# -*- coding: utf-8 -*-
#Python3.x
import urllib
import urllib.parse
import urllib.request
from bs4 import BeautifulSoup
import csv, re, sys, unicodedata
csvfile=open('indeed_scrape.csv', 'w', encoding='utf-8', errors='replace')
writer=csv.writer(csvfile)
list_url= ["https://www.indeed.com/cmp/McDonald's/reviews?fcountry=US"]
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-content")}
reviews=soup.find_all(attrs=review_tag)
len_reviews=len(reviews)
Комментарии:
1. Я предлагаю вам использовать
requests
библиотеку на python, также не могли бы вы распечатать код состояния и проверить, возможно, это может быть не так200
. Чтобы получить код состоянияrequests
, просто сделайтеvariable.status_code
, но для urllib я не уверен, но вы можете проверить. Причина этого в том, что сайт может быть защищен и предотвращает поиск веб-сканеров, это всегда хорошая идея проверить это.2. Для правильного отображения этой страницы необходим веб-браузер, поскольку фактические обзоры находятся внутри объекта JavaScript, где
window._initialData
установлен параметр. Проверьте, что вы загрузили с помощью urllib.
Ответ №1:
Из каких других примеров в вашем наборе вы получаете хиты?
Я просмотрел raw_html, и в HTML нет «cmp-Review-content», поэтому BS4 не может их найти.
In [12]: 'cmp-Review-content' in str(raw_html)
Out[12]: False
raw_html выглядит как гигантский json dict в разделе reviewsList, поэтому вам, возможно, придется его разобрать
Комментарии:
1. Спасибо! Имеет смысл, но странно, что raw_html отличается для этой компании. Тогда я приступаю к работе.
2. Я посмотрел на indeed.com/cmp/Lockheed-Martin/reviews и это было то же самое. Возможно, они переходят на новый способ публикации