Webscraping Amazon с BeautifulSoup - PullRequest
       57

Webscraping Amazon с BeautifulSoup

0 голосов
/ 20 ноября 2018

Я пытаюсь соткать отзывы Амазонки: https://www.amazon.com/Python-Crash-Course-Hands-Project-Based/dp/1593276036/ref=sr_1_3?ie=UTF8&qid=1541450645&sr=8-3&keywords=python

Вот мой код:

import requests as req
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Kevin\'s_request'}
r = req.get('https://www.amazon.com/Python-Crash-Course-Hands-Project-Based/dp/1593276036/ref=sr_1_3?ie=UTF8&qid=1541450645&sr=8-3&keywords=python', headers=headers)
soup = BeautifulSoup(r.text, "html.parser")
soup.find(class_="a-expander-content a-expander-partial-collapse-content")

Я получаю только пустой список. Я использую Python 3.6.4 в ноутбуках Jupyter и BS 4

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Попробуйте этот подход. Оказывается, ваш селектор не смог ничего найти. Тем не менее, я исправил это для цели:

import requests
from bs4 import BeautifulSoup

def get_reviews(s,url):
    s.headers['User-Agent'] = 'Mozilla/5.0'
    response = s.get(url)
    soup = BeautifulSoup(response.text,"lxml")
    return soup.find_all("div",{"data-hook":"review-collapsed"})

if __name__ == '__main__':
    link = 'https://www.amazon.com/Python-Crash-Course-Hands-Project-Based/dp/1593276036/ref=sr_1_3?ie=UTF8&qid=1541450645&sr=8-3&keywords=python'    
    with requests.Session() as s:
        for review in get_reviews(s,link):
            print(f'{review.text}\n')
0 голосов
/ 20 ноября 2018

Не уверен, что происходит на вашей стороне, но этот код работает нормально.Вот оно (Python 3.6, BSP 4.6.3):

import requests
from bs4 import BeautifulSoup

def s_comments(url):
    headers = {'User-Agent': 'Bob\'s_request'}
    response = requests.get(url, headers=headers )
    if response.status_code != 200:
        raise ConnectionError

    soup = BeautifulSoup(response.content)
    return soup.find_all(class_="a-expander-content a-expander-partial- collapse-content")


url = 'https://www.amazon.com/dp/1593276036'    
reviews = s_comments(url)
for i, review in enumerate(reviews):
    print('---- {} ----'.format(i))
    print(review.text)
...