Почему мой код очистки работает со всеми страницами, кроме этой?

#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 и это было то же самое. Возможно, они переходят на новый способ публикации