Python - перебирайте страницы с помощью BeautifulSoup - PullRequest
0 голосов
/ 06 декабря 2018

Я использую BeautifulSoup4 для очистки данных с нескольких веб-страниц.Например, в приведенном ниже случае, URL-адрес https://wadsfred.aliexpress.com/store/425826/search/1.html, и 96 страниц.Моя проблема в том, что скрипт выдает мне ошибку после нескольких страниц.Обычно, когда код достигает страницы 15-20.Сообщение об ошибке:

Traceback (последний вызов был последним): файл "main.py", строка 34, в if next_page.text! = 'Next': AttributeError: у объекта 'NoneType' нет атрибута 'text

Заранее спасибо за помощь!

import requests
import os
import csv
from itertools import count
from bs4 import BeautifulSoup

os.chdir('C:\MyFolder')
page_nr = 1
price = []
min_order = []
prod_name = []

for page_number in count(start = 1):
    url = 
'https://wadsfred.aliexpress.com/store/425826/search/{}'.format(page_nr) + 
'.html'
    print(url)
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    for div_b in soup.find_all('div', {'class':'cost'}):
        price.append(div_b.text)

    for min_or in soup.find_all('span', {'class':'min-order'}):
        min_order.append(min_or.text)

    for pr_name in soup.find_all('div', {'class':'detail'}):
        for pr_h in pr_name.find_all('h3'):
            for pr_title in pr_h.find_all('a'):
                prod_name_s = (pr_title.get('title').strip())
                prod_name.append(prod_name_s[:120])

    print(len(prod_name))
    page_nr = page_nr + 1
    next_page = soup.find('a', {'class':'ui-pagination-next'})
    if next_page.text != 'Next':
      break

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Он перенаправлен на страницу входа в систему, добавьте user-agent к вашему запросу

heads = {"User-Agent" : 'Mozilla/5.0......'}
for page_number in count(start = 1):
    .....
    response = requests.get(url, headers=heads)

, еще лучше используйте requests.session() для создания постоянного сеанса (куки)

0 голосов
/ 06 декабря 2018

Вероятно, тег 'a' с классом 'ui-pagination-next' отсутствует на некоторых страницах.Вы можете пропустить эту проверку, когда вы уже знаете, что всего 96 страниц.И поместите блок очистки в try catch, чтобы пропустить ошибки на некоторых страницах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...