我正在抓取该网站上特定产品的所有评论。还处理分页。不同页面的 URL 如下:
代码按预期工作,但在访问 (n/2)+1 页面时,网站将重定向到评论的第一页。假设一个网站的总页数为 12。在直接访问 URL 为 https://www.hepsiburada.com/apple-macbook-pro-m1-cip-8gb-256gb-ssd-macos-13-qhd-tasinabilir-bilgisayar-uzay-grisi-myd82tu-a-p-HBV0000130VNO-yorumlari?sayfa=7
它重定向到 URL 所在的第一页是 https://www.hepsiburada.com/apple-macbook-pro-m1-cip-8gb-256gb-ssd-macos-13-qhd-tasinabilir-bilgisayar-uzay-grisi-myd82tu-a-p-HBV0000130VNO-yorumlari
当我们使用网站的页面链接转到第 7 页时,它会毫无问题地打开第 7 页。但只有当我们直接访问页面时,它才会重定向。
如何使用 BeautifulSoup 处理这个问题?另外,请不要建议使用 Selenium,因为客户端只需要使用 BeautifulSoup 来完成任务。
这是 Python 代码:
from urllib import response
from bs4 import BeautifulSoup
from django.shortcuts import redirect
import requests
import sys
import re
file_path = 'output.txt'
sys.stdout = open(file_path, "w", encoding="utf-8")
# url = sys.argv[1]
url = 'https://www.hepsiburada.com/apple-macbook-pro-m1-cip-8gb-256gb-ssd-macos-13-qhd-tasinabilir-bilgisayar-uzay-grisi-myd82tu-a-p-HBV0000130VNO-yorumlari'
response = requests.get(url, headers={"User-Agent":"Mozilla/5.0"})
soup = BeautifulSoup(response.content, 'html5lib')
div = soup.find_all('div', class_='paginationContentHolder')
# l = [(div.contents[0].strip(), span.text.strip())
# for div in soup.select('div.league-data')
# for span in div.select('span')]
divlist = soup.find_all("div", {'itemprop':'review'})
# print(divlist)
# for i in divlist:
# print(i)
# print('---------------------------')
pagecount = soup.find('div', {'class':'paginationBarHolder'})
pagelist = pagecount.find_all('ul')
pagelistnew = []
for i in pagelist[0]:
if i.text.isdigit():
pagelistnew.append(int(i.text))
maxpage = max(pagelistnew)
print(maxpage)
firstcard = divlist[0]
for i in divlist:
if i.find('span', {'itemprop':'description'}):
print('Review: ' + i.find('span', {'itemprop':'description'}).text)
ratinglist = i.find_all('div', {'class':'star', 'style':'width:12px;height:12px'})
print('Rating: ' + str(len(ratinglist)))
print('Date: ' + i.find('span', {'itemprop': 'datePublished'}).text)
# rating = 0
# for j in ratinglist:
# rating = rating + 1
# print(rating)
print()
urlnew = 'https://www.hepsiburada.com/apple-macbook-pro-m1-cip-8gb-256gb-ssd-macos-13-qhd-tasinabilir-bilgisayar-uzay-grisi-myd82tu-a-p-HBV0000130VNO-yorumlari?sayfa='
for i in range(2, maxpage + 1):
# payload = {'sayfa':i}
req = requests.get(urlnew + str(i), headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246", 'Access-Control-Allow-Origin': '*'}, allow_redirects=False)
print('URL: ' + urlnew + str(i))
print(req.status_code)
print()
soup2 = BeautifulSoup(req.content, 'html5lib')
divlist1 = soup2.find_all("div", {'itemprop':'review'})
# firstcard1 = divlist1[0]
for l in divlist1:
if l.find('span', {'itemprop':'description'}):
print('Review: ' + l.find('span', {'itemprop':'description'}).text)
ratinglist1 = l.find_all('div', {'class':'star', 'style':'width:12px;height:12px'})
print('Rating: ' + str(len(ratinglist1)))
print('Date: ' + l.find('span', {'itemprop': 'datePublished'}).text)
print()
回答1
要获得所有评论,您可以使用他们的 API url。例如:
import json
import requests
# HBV0000130VNO is from the URL in the question
url = "https://user-content-gw-hermes.hepsiburada.com/queryapi/v2/ApprovedUserContents?skuList=HBV0000130VNO&from={}&size=10"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0"
}
from_ = 0
while True:
data = requests.get(url.format(from_), headers=headers).json()
# uncomment to see all data:
# print(json.dumps(data, indent=4))
for d in data["data"]["approvedUserContent"]["approvedUserContentList"]:
print(d["customer"]["name"], d["customer"]["surname"])
print(d["review"]["content"])
print()
if data["currentItemCount"] != 10:
break
from_ += 10
印刷:
h********** z*********
Mükemmel kalitede bir ürün
A*** T*****
tek kelimeyle EFSANE. Her zaman olduğu gibi Apple kalitesi 1 numara. Benim kullanımımla 2 gün gidiyor şarjı günlük iş maillerimi yanıtlıyor raporlarımı inceliyorum. Akşamda belki bir dizi-film açıp şarjını bitiriyorum. Performansa diyecek hiç bir şey yok. Bu mimari ve altyapı son derece muazzam çalışacak şekilde tasarlanmış zaten.
E*** D*******
Kesinlikle fiyatıyla performansının birbirini fazlasıyla karşıladığı şahane bir iş istasyonu. Malzeme yapısı ve içindeki yeni M1 Yonga seti işlemcisi ile uzun süreli kullanımı ve iş gücünü vaat ediyor. Ayrıca içinden çıkan 61W'lık Adaptörü ile hızlı şarj olması ayrı bir güzelliği. Hepsiburada'ya ve Lojistiği olan HepsiJet'e hızlı ve güvenilir oldukları için çok teşekkür ederim.
O**** B****
Mükemmel bir ürün. Kullanmadan önce bu ekosisteme karşı yargıları olanlar, şimdi macbook'uma tapıyorlar.
A**** A*********
2019 macbook airden geçiş yaptığım için söyleyebilirim ki özellikle Apple'ın m1 çip için optimize ettiği safari süper hızlı çalışıyor chrome kullanmayı bıraktım diyebilirim görüntü ses kalitesi çok daha iyi ve işlemci çok hızlı çok memnunum pil 20 saat gidiyormuş ben genelde güç kaynağına bağlı kullanıyorum
Y**** G*****
Ben satın aldığımda MBA 512 GB ve MBP 256 fiyatları birbirine çok yakındı. O yüzden MBP tercih ettim. Arada oyun oynamak isteyenler için MBA yerine kesinlikle tecih edilmesi gereken ürün. Çünkü bazı oyunlarda throttling problemi yaşanabiliyor (Tomb Raider oyunları gibi)
ş***** a****
Tek kelimeyle Apple kalitesiyle tasarlanmış şahane bir ürün; fakat Türkiye şartlarından dolayı sırtımıza ağır yükler bindiren kur farkından kaynaklanan kallavi fiyatı biraz üzüyor.
...and so on.