urlopen возвращает ошибку перенаправления для действительных ссылок [Ошибка HTTP 308: постоянное перенаправление]

Я пытаюсь очистить списки Amazon, я постоянно получаю ошибку перенаправления с помощью своего скребка. Я даже использовал http.cookiejar.CookieJar и urllib.request.HTTPCookieProcessor, чтобы избежать цикла перенаправления, но все равно получаю ошибку.

      from bs4 import BeautifulSoup as soup
import pandas as pd
import requests
import urllib
import time 
import requests, random
from requests.exceptions import HTTPError
from socket import error as SocketError
from http.cookiejar import CookieJar

data =[]

def getdata (url):
    user_agents = [
      'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0',
      'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
      'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:77.0) Gecko/20100101 Firefox/77.0',
      'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
    ]
    
    user_agent = random.choice(user_agents)
    header_ = {'User-Agent': user_agent}
    req = urllib.request.Request(url, headers=header_)
    cj = CookieJar()
    opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
    response = opener.open(req)
    amazon_html = response.read().decode('utf8', errors='ignore')
    a_soup = soup(amazon_html,'html.parser')
    cat = k
    
    for e in a_soup.select('div[data-component-type="s-search-result"]'):
        
        try:
            asin = e.find('a')['href'].replace('dp%2F', '/dp/').split('/dp/')[1].replace('%2','/ref').split('/ref')[0]
        except:
            asin = 'No ASIN Found'
    
        try:
            title = e.find('h2').text
        except:
            title = None


        data.append({
            'Category': cat,
            'ASIN': asin,
            'Title':title
        })
        
    return a_soup

def getnextpage(a_soup):
    try:
        page = a_soup.find('a',attrs={"class": 's-pagination-item s-pagination-next s-pagination-button s-pagination-separator'})['href']
        url =  'http://www.amazon.in'+ str(page)
    except:
        url = None
    return url

keywords = ['headphone','mobile','router','smartwatch']

for k in keywords:
    url = 'https://www.amazon.in/s?k='+k
    
    while True:
        geturl = getdata(url)
        url = getnextpage(geturl)
        
        if not url:
            break
        print(url)

Выход

  • HTTPError: Ошибка HTTP 308: Скриншот ошибки постоянного перенаправления Любые идеи, как я могу это исправить?

0 ответов

Другие вопросы по тегам