【问题标题】:scraping reviews from a data tab with python使用 python 从数据选项卡中抓取评论
【发布时间】:2021-07-11 15:15:35
【问题描述】:

我无法抓取多个页面。我认为我的错误出在 baseurl+str 中,但不确定如何继续。我感谢任何想法和建议。

基本页面--https://www.premier1supplies.com/p/prima-heat-lamp

import requests  
from lxml import html      
import pandas as pd
import time 
from IPython.display import display, clear_output 

baseURL = "https://www.premier1supplies.com/p/prima-heat-lamp"

mypath = '//*[@id="product-information-tab-pane-reviews"]/div/div[4]/div/div/div[2]/p[2]'

reviews_all =[]

for i in range (5):
    URL=baseURL+str(i+1)
    page = requests.get(URL) 
    root = html.fromstring(page.content)
    reviews = [s.text for s in root.xpath(mypath)]
    reviews_all.extend(reviews)
    time.sleep(0.5)
    clear_output()
    print(URL)

df = pd.DataFrame({'Review': reviews_all})   

我可以使用以下代码从第一页正常拉出,但拉出多个页面是我遇到问题的地方。 评论标签的第 2 页—— https://www.premier1supplies.com/p/prima-heat-lamp?slug=prima-heat-lamp&offset=5&limit=5#product-information-reviews

from lxml import html      
import pandas as pd
import time 
from IPython.display import display, clear_output 

mypath = '//*[@id="product-information-tab-pane-reviews"]/div/div[4]/div/div/div[2]/p[2]'
URL = "https://www.premier1supplies.com/p/prima-heat-lamp?slug=prima-heat-lamp&offset=0&limit=5#product-information-reviews"
page = requests.get(URL)
root = html.fromstring(page.content)
reviews = [s.text_content() for s in root.xpath(mypath)]

【问题讨论】:

  • 您得到的具体错误是什么?
  • 此外,如果您没有考虑到解析的美丽汤,该网站是否没有公共 api 会更好地访问?
  • 就是我创建数据框的时候是空白的。我没有在阅读获取信息。
  • 不确定公共 API
  • 而且还没有考虑过解析漂亮的汤,在我的背景知识方面还是初出茅庐。

标签: python tabs screen-scraping


【解决方案1】:

在编写自定义 API 时要理解的一个关键点是理解与您交互的 URL 的每个部分的含义。这样您就可以了解如何修改它以获得您想要的。因此,为了理解 URL,我建议执行以下步骤:

对于这个网址:https://www.premier1supplies.com/p/prima-heat-lamp?slug=prima-heat-lamp&offset=0&limit=5#product-information-reviews 有以下评论[1,2,3,4,5,6,7,8,9,10]

  1. 获取基本 URL,这是最简单的,因为该 URL 仍可指向根页面。通常,这意味着删除任何不必要的 GET 标记,因此:https://www.premier1supplies.com/p/prima-heat-lamp#product-information-reviews
  2. 按顺序添加每个标签以了解每个标签的作用。在这种情况下,slug 变量只是另一个指向正确文章的指针,可以省略
  3. 偏移量是评论列表中应显示的距离。例如 offset = 0 将显示所有评论,offset = 5 将显示从 5 开始的评论。
  4. Limit 是要显示的评论总数。限制为 5 显示从偏移开始的 5 条评论,而限制为 10 显示从偏移开始的 10 条评论

知道了 URL 是如何构建的,我们现在可以像这样以编程方式组装我们的请求:

base = 'https://www.premier1supplies.com/p/prima-heat-lamp'
tag = '#product-information-reviews'
offset = 0
limit = 5
URL = base + '?offset=' + str(offset) + '&limit=' + str(limit) + tag

这将使用指定的 GET 参数创建一个 URL。然后,您只需保持请求页面每次都增加偏移参数(通过限制,否则您将错过一些评论或获得重复的评论),直到您检测到没有更多评论并且唯一的条目是看到的写评论选项这里:https://www.premier1supplies.com/p/prima-heat-lamp?offset=15000&limit=5#product-information-reviews

或者,您可以增加限制以在一个请求中获得所有评论。但是,这样做的问题是您可能会同时提取太多评论,并且请求变得太大而无法处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-30
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    相关资源
    最近更新 更多