【问题标题】:scraping using beautiful soup and selenium problem使用美丽的汤和硒问题进行刮擦
【发布时间】:2018-10-13 14:53:41
【问题描述】:

现在我正在这个网址上进行抓取https://www.lazada.com.my/products/xiaomi-mi-a1-4gb-ram-32gb-rom-i253761547-s336359472.html?spm=a2o4k.searchlistcategory.list.64.71546883QBZiNT&search=1

我想抓取产品的所有评论,但出现错误.. 任何帮助我真的很感激谢谢你:)

我的代码

import requests
from selenium import webdriver
from bs4 import BeautifulSoup as soup
import time
from selenium.webdriver.chrome.options import Options


url = 'https://www.lazada.com.my/products/xiaomi-mi-a1-4gb-ram-32gb- rom-i253761547-s336359472.html? spm=a2o4k.searchlistcategory.list.64.71546883QBZiNT&search=1'

chrome_options = Options()
#chrome_options.add_argument("--headless")
browser = webdriver.Chrome('/Users/e5/fyp/chromedriver', 
chrome_options=chrome_options)
browser.get(url)
time.sleep(0.1)


d = soup(requests.get('https://www.lazada.com.my/products/xiaomi-mi-a1-4gb-ram-32gb-rom-i253761547-s336359472.html?spm=a2o4k.searchlistcategory.list.64.71546883QBZiNT&search=1').text, 'html.parser')
results = list(map(int, filter(None, [i.text for i in d.find_all('button', {'class':'next-pagination-item'})])))
print (results)
for i in range(min(results), max(results)+1):

    browser.find_element_by_xpath('//*[@id="module_product_review"]/div/div[3]/div[2]/div/div/button[{i}]').click()
    page_soups = soup(browser.page_source, 'html.parser')
    headline = page_soups.findAll('div',attrs={"class":"item-content"})

    for item in headline:
        top = item.div
        text_headlines = top.text
        print(text_headlines)

我的错误

InvalidSelectorException: Message: invalid selector: Unable to locate an element with the xpath expression //*[@id="module_product_review"]/div/div[3]/div[2]/div/div/button[{i}] because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//*[@id="module_product_review"]/div/div[3]/div[2]/div/div/button[{i}]' is not a valid XPath expression.
  (Session info: chrome=69.0.3497.100)
  (Driver info: chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Windows NT 10.0.17134 x86_64)

【问题讨论】:

  • 你搞清楚了吗?你试过我的答案了吗?

标签: python selenium web-scraping beautifulsoup


【解决方案1】:

只需使用他们的 json api,不需要 selenium 或 BeautifulSoup。

import requests

count = 0
for i in range(3):
    count+=1
    url = ('https://my.lazada.com.my/pdp/review/getReviewList?'
        'itemId=253761547&pageSize=5&filter=0&sort=0&pageNo='+str(count))
    req = requests.get(url)
    data = req.json()
    for i in data['model']['items']:
        buyerName = i['buyerName']
        reviewContent = i['reviewContent']
        print(buyerName, reviewContent)

【讨论】:

  • 哇,谢谢,但我如何仅使用 json 捕获“reviewContent”
  • 刚才我尝试工作,但为什么之后我尝试运行它时一直显示此错误----> 9 data = req.json() JSONDecodeError: Expecting value: line 2 column 1 ( char 2)谢谢你,我很抱歉给你带来麻烦..我是json新手..;)
  • 不要在短时间内发出过多的请求,否则网站会屏蔽你,每个请求都使用时间延迟,以免被屏蔽!过一段时间或从不同的 ip 尝试它会起作用!
猜你喜欢
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 2014-05-28
  • 1970-01-01
  • 2019-03-13
  • 2020-09-28
相关资源
最近更新 更多