python漂亮的Web垃圾模拟单击以刮取所有页面

fwzugrvs  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(167)

我在努力拼凑时遇到了一个有趣的问题http://www.o-review.com/database_filter_model.php?table_name=glasses&tag= 包含42页的数据。我能够成功地抓取第一页信息,但在尝试抓取所有页面时,我发现url保持不变,并使用网站底部的按钮更改页面。
检查器中的html代码如下所示:

<div onclick="filter_page('1')" class="filter_nav_button round5" 
    style="cursor:pointer;"><img src="/images/icon_arrow_next.svg"></div>

我对抓取和python非常陌生,但有人告诉我需要在javascript中模拟“点击”,我完全不知道该怎么做,也不确定它是否可以硬编码。到目前为止,我尝试某事的尝试很弱:

response = get('http://www.o-review.com/database_filter_model.php? 
    table_name=glasses&tag=')
    soup = bs(response.text, 'html.parser')
    print(soup)

    for page in range(1, 42):
        pages = soup.find('div', onclick_ = 'filter_page()')

希望过去有人解决了这个问题。非常感谢您的帮助!谢谢

nxowjjhe

nxowjjhe1#

import requests
from bs4 import BeautifulSoup

def main(url):
    with requests.Session() as req:
        for page in range(1, 44):
            print("[*] - Extracting Page# {}".format(page))
            data = {
                "table_name": "glasses",
                "family": "",
                "page": page,
                "sort": "",
                "display": "list",
                # "r": "0.537358662514788"
            }
            r = req.get(url, data=data)
            soup = BeautifulSoup(r.text, 'lxml')
            # Do whatever you need then.

if __name__ == "__main__":
    main('http://www.o-review.com/ajax/database_filter_model.php')

相关问题