Перенесите несколько веб-страниц с веб-сайта с помощью beautifulsoup, запросы в Python - PullRequest
0 голосов
/ 19 июня 2020

Я хочу создать несколько страниц WB на веб-сайте. Прямо сейчас мой код может очищать обзоры с 1-й страницы. Я бы хотел, чтобы он соскребал обзоры с связанных страниц. В этом примере до страницы 8. Это ссылка на веб-сайт https://www.mouthshut.com/product-reviews/Kotak-811-Mobile-Banking-reviews-925917218

import requests
from bs4 import BeautifulSoup
import pandas as pd
import csv

URL = "https://www.mouthshut.com/product-reviews/Kotak-811-Mobile-Banking-reviews-925917218"
r = requests.get(URL)
soup = BeautifulSoup(r.content, 'html5lib')
reviews = []  # a list to store reviews

# Use a CSS selector to extract all the review containers
review_divs = soup.select('div.col-10.review')
for element in review_divs :
    review = {'Review_Title': element .a.text, 'URL': element .a['href'], 'Review': element .find('div', {'class': ['more', 'reviewdata']}).text.strip()}
    reviews.append(review)

df = pd.DataFrame(reviews)
print(df)

Я хочу хранить все обзоры с 8 страниц в одном фрейме данных df. Буду признателен за помощь. Спасибо

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Итак, это первая страница https://www.mouthshut.com/product-reviews/Kotak-811-Mobile-Banking-reviews-925917218, верно. Остальные страницы имеют -page-x в конце URL-адреса. Так что вы можете просто сделать для l oop в своем скрипте, вот так.

import requests
from bs4 import BeautifulSoup
import pandas as pd
import csv

URL = ""

for x in range(1, 9):
    if x == 1:
        URL = "https://www.mouthshut.com/product-reviews/Kotak-811-Mobile-Banking-reviews-925917218"
    else:
        URL ="https://www.mouthshut.com/product-reviews/Kotak-811-Mobile-Banking-reviews-925917218-page-{}".format(x)

    r = requests.get(URL)
    soup = BeautifulSoup(r.content, 'html5lib')
    reviews = []  # a list to store reviews

    # Use a CSS selector to extract all the review containers
    review_divs = soup.select('div.col-10.review')
    for element in review_divs :
        review = {'Review_Title': element .a.text, 'URL': element .a['href'], 'Review': element .find('div', {'class': ['more', 'reviewdata']}).text.strip()}
        reviews.append(review)

    df = pd.DataFrame(reviews)
    print(df)
0 голосов
/ 19 июня 2020

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

...