Я даю URL-адрес в качестве ввода: url = "https://www.amazon.in/s?k=headphones&page=1" Это работает нормально, но останавливается на странице 19 Вместо того, чтобы прерываться на странице 19, я хочу дать следующий ввод как "https://www.amazon.in/s?k=" +
from bs4 import BeautifulSoup as soup
import pandas as pd
import requests
data =[]
def getdata (url):
header = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)' }
req = urllib.request.Request(url, headers=header)
amazon_html = urllib.request.urlopen(req).read()
a_soup = soup(amazon_html,'html.parser')
for e in a_soup.select('div[data-component-type = "s-search-result"]'):
try:
title = e.find('h2').text
except:
title = None
data.append({
'title':title
})
return a_soup
def getnextpage(a_soup):
page= a_soup.find('a',attrs = {"class": 's-pagination-item s-pagination-next s-pagination-button s-pagination-separator'})
page = page['href']
url = 'http://www.amazon.in'+ str(page)
return url
while True:
geturl = getdata(url)
url = getnextpage(geturl)
if not url:
break
print(url)```
```output = pd.DataFrame(data)
output
Этот код возвращает правильные результаты, но вместо того, чтобы указывать новый URL-адрес каждый раз, когда я хочу, чтобы он вводил список элементов, которые можно добавлять в конце URL-адреса по одному, чтобы получить результаты, которые можно добавить в фрейм данных Примечание. Результаты поиска останавливаются на 19-й странице.
Составьте список ключевых слов, повторяйте его и включайте цикл while в каждую итерацию.
keywords = ['speakers','earbuds']
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)
Имейте в виду, что Amazon не любит такой автоматический доступ к своим страницам и довольно быстро распознает шаблоны доступа. Чтобы немного уменьшить частоту запросов, вы должны хотя бы включить некоторую задержку time.sleep()
. Конечно, было бы еще лучше использовать официальный API.
from bs4 import BeautifulSoup as soup
import pandas as pd
import requests
import urllib
data =[]
def getdata (url):
header = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)' }
req = urllib.request.Request(url, headers=header)
amazon_html = urllib.request.urlopen(req).read()
a_soup = soup(amazon_html,'html.parser')
for e in a_soup.select('div[data-component-type = "s-search-result"]'):
try:
title = e.find('h2').text
except:
title = None
data.append({
'title':title,
'url':'http://www.amazon.in' + e.h2.a['href']
})
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 = ['speakers','earbuds']
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)
http://www.amazon.in/s?k=speakers&page=2&qid=1649420352&ref=sr_pg_1
...
http://www.amazon.in/s?k=speakers&page=20&qid=1649420373&ref=sr_pg_19
http://www.amazon.in/s?k=earbuds&page=2&qid=1649420375&ref=sr_pg_1
...
http://www.amazon.in/s?k=earbuds&page=20&qid=1649420394&ref=sr_pg_19
pd.DataFrame(data)
)Это все еще не работает в цикле
Он работает нормально! Большое спасибо !
Это получение результатов только динамиков, а не наушников. Как я могу получить результаты наушников, когда они достигнут 19-й страницы динамиков.