Python漂亮的网页抓取模拟点击抓取所有页面

时间:2021-07-11 01:14:34

标签: javascript python web-scraping visual-studio-code beautifulsoup

我在尝试抓取包含 42 页数据的 http://www.o-review.com/database_filter_model.php?table_name=glasses&tag= 时遇到了一个有趣的问题。我能够成功抓取第一页信息,但是在尝试抓取所有页面时,我发现 URL 保持不变,并且更改页面使用网站底部的按钮。

inspector 中的 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()')

希望过去有人解决了这个问题。帮助将不胜感激!谢谢!

编辑:这是我要添加的代码:

    ## Find All Frame models
    for find_frames in soup.find_all('a', class_ = 'round5 
    grid_model'):
        # Each iteration grabs child text and prints it
        all_models = find_frames.text
        print(all_models)

这将被添加到注释要添加代码的地方!谢谢!

2 个答案:

答案 0 :(得分:2)

请求是通过 n_1=input() n_2=input() i=0 ch=0 for i in n_1: if(i in n_2): if n_1.lower()==n_2.lower(): ch=0 if(ch==0): print("match") else: print("not match") 请求发出的,您可以在其中查看我的 previous-answer 以了解如何获取实际的 POST

还有 APIhtml.parser 不是您的问题的一部分。

我使用 lxml 的原因是根据 documentation

lxml 更快
html.parser

答案 1 :(得分:0)

我看到了这个问题的答案和你的评论。 αԋɱҽԃ αмєяιcαη 的代码有效的原因是它向实际的 ajax api 发送请求,该 ajax api 正在从中获取数据。您可以轻松地使用浏览器的开发人员工具来跟踪它。这不是因为 lxml 或其他什么,你只需要找到正确的来源 ;)

当然,αԋɱҽԃ αмєяιcαη 应该在他的回答中解释一些部分,为你澄清一切。