【问题标题】:web scraping next page网页抓取下一页
【发布时间】:2017-10-22 21:11:14
【问题描述】:

我在尝试从各个页面抓取一些数据时遇到问题。我已经尝试谷歌一些解决方案,但根本没有用。

我的意思是从这个网站上抓取显卡的名称:“https://www.newegg.com/Product/ProductList.aspx?Submit=StoreIM&IsNodeId=1&bop=And&Depa=1&Category=38&Page=2&PageSize= 12&order=BESTMATCH"

首先,我尝试构建仅适用于其中一个页面的代码。而且效果很好。

    from urllib2 import urlopen as uReq
    from bs4 import BeautifulSoup as soup
    import requests
    import re

    my_url = "https://www.newegg.com/Product/ProductList.aspx?Submit=StoreIM&IsNodeId=1&bop=And&Depa=1&Category=38&Page=2&PageSize=12&order=BESTMATCH"
    uClient = uReq(my_url)
    page_html = uClient.read()
    uClient.close()
    page_soup = soup(page_html, "html.parser")

    containers = page_soup.findAll("div",{"class":"item-container"})
    container = containers[0]

    for container in containers:
        title_container = container.findAll("a",{"class":"item-title"})
        product_name = title_container[0].text
        print("product_name: " + product_name)

######## 有了这个,我在第 2 页得到了图形卡的名称。如果我在 HTML 中将它切换为 1,我也可以得到第一个的名称。

#######

我试图做一个循环来处理它,但它似乎只是一遍又一遍地返回第一页。

    i = 1
    my_url = "https://www.newegg.com/Product/ProductList.aspx?Submit=StoreIM&IsNodeId=1&bop=And&Depa=1&Category=38&Page={}&PageSize=12&order=BESTMATCH".format(i)
    while i <= 3: 
        uClient = uReq(my_url)
        page_html = uClient.read()
        uClient.close()
        page_soup = soup(page_html, "html.parser")

        # esse é o que vou usar para fazer o loop

        containers = page_soup.findAll("div",{"class":"item-container"})

        container = containers[0]


        for container in containers:
            title_container = container.findAll("a",{"class":"item-title"})
            product_name = title_container[0].text

            print("product_name: " + product_name)

        i = i+1

有人可以帮我吗? =D

PS:各位,请随意更改我的代码并提出更好的解决方案。 PS 2:Jupyter 实验室的 Python 3.5。

【问题讨论】:

    标签: web web-scraping beautifulsoup python-requests


    【解决方案1】:

    您需要以这样的方式创建一个循环,以便您在刮板中提供的链接完美滚动。您可以通过多种方式实现相同的目的。这是其中之一。只需执行脚本,您将获得遍历三个页面的所有产品名称。

    import requests
    from bs4 import BeautifulSoup
    
    for page in range(1,4):
        my_url = "https://www.newegg.com/Product/ProductList.aspx?Submit=StoreIM&IsNodeId=1&page={}&bop=And&Depa=1&Category=38&PageSize=12&order=BESTMATCH".format(page)
        res = requests.get(my_url).text
        soup = BeautifulSoup(res, "lxml")
        for container in soup.select(".item-title"):
            print("product_name: {}".format(container.text))
    

    【讨论】:

    • 嘿,@Shahin。非常感谢您的帮助。是的,它确实工作得很好!我不知道你建议我使用的所有包(lxml),所以我尝试了一些谷歌来理解你的代码。但是关于我的代码,你能解释一下我出了什么问题吗?我不明白为什么它一遍又一遍地刮第一页。我做了一个循环来改变,不是吗? btw:抱歉让你久等了。我看到了你的帖子,但我在工作,我没有 Python 可以尝试。 =D
    • 评论已删除。谢谢。
    • 我改进了代码以寻找更多细节:这是更好的方法吗? (我试图用“for”做两个循环......没有形成就显示很糟糕)-------对于soup.select(“.item-title”)中的容器:print(“product_name: {}".format(container.text)) for shipping_container in soup.select(".price-ship"): print("shipping_const: {}".format(shipping_container.text))
    猜你喜欢
    • 2021-06-03
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 2023-03-23
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多