【问题标题】:requests_html render scrolldown, script not workingrequests_html 渲染向下滚动,脚本不起作用
【发布时间】:2021-08-26 07:30:18
【问题描述】:

我需要从通过向下滚动加载数据的网站抓取数据。 网站向下滚动前返回5条数据,预计向下滚动后返回80条数据。 我正在使用 requests_html 模块并尝试过这个

from requests_html import  HTML, HTMLSession

keyword = '유산균'
n = 1
url = f'https://search.shopping.naver.com/search/all?frm=NVSHATC&origQuery={keyword}&pagingIndex={n}&pagingSize=80&productSet=total&query={keyword}&sort=rel&timestamp=&viewType=list'

session = HTMLSession()
ses = session.get(url)
html = HTML(html=ses.text)

item_list = html.find('div.basicList_title__3P9Q7')
print(len(item_list))

ses.html.render(scrolldown=100, sleep=.1)

'''
ses.html.render(script="window.scrollTo(0, 99999)", sleep= 10) 
also tried not worked either
'''

print(len(item_list))

我预计结果是 5, 80,但两个打印都返回了相同的结果。 5 和 5。

我的代码有什么问题?

【问题讨论】:

  • 网站是什么?我们无法重现该问题。
  • @RJAdriaansen 我编辑了代码!
  • 你必须在向下滚动命令后再次调用item_list = html.find('div.basicList_title__3P9Q7')

标签: python python-requests-html


【解决方案1】:

当您在加载站点时监视network activity 时,您会看到它从 api 加载搜索结果。这意味着您可以直接从 api 中检索数据而无需抓取。这是一个将第一页加载为 pandas 数据框的示例:

import requests
import pandas as pd

keyword = '유산균'
n = 1
r = requests.get(f'https://search.shopping.naver.com/api/search/all?sort=rel&pagingIndex={n}&pagingSize=80&viewType=list&productSet=total&deliveryFee=&deliveryTypeValue=&frm=NVSHATC&query={keyword}&origQuery={keyword}').json()
df = pd.DataFrame(r['shoppingResult']['products'])

您可以添加一个循环来检索下一页等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    相关资源
    最近更新 更多