首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在一个网站中从多个页面中抓取数据,我正在使用Python和BeautifulSoup

如何在一个网站中从多个页面中抓取数据,我正在使用Python和BeautifulSoup
EN

Stack Overflow用户
提问于 2018-06-30 01:32:41
回答 1查看 150关注 0票数 1
代码语言:javascript
复制
   # -*- coding: utf-8 -*-
"""
Created on Fri Jun 29 10:38:46 2018

@author: Cinthia
"""

from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq
array = ['146-face', '153-palettes-sets', 'https://www.sociolla.com/147-eyes', 'https://www.sociolla.com/150-lips', 'https://www.sociolla.com/149-brows', 'https://www.sociolla.com/148-lashes']
base_url='https://www.sociolla.com/142-face'
uClient = uReq(base_url)
page_html = uClient.read()
uClient.close()

#html parsing
page_soup = soup(page_html, "html.parser")

#grab the product
kosmetik = page_soup.findAll("div", {"class":"col-md-3 col-sm-6 ipad-grid col-xs-12 productitem"})
print(len(kosmetik))

我想从那个网站上抓取数据,上面的代码只是在基础网址上有多少产品。我不知道这个数组是如何工作的,所以它可以从我在数组中创建的所有页面中获取产品的数据,如描述、图像、价格。

我是Python的新手,对循环还不太了解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-01 06:07:51

您可以在此处找到表/网格的根元素id=product-list-grid,并提取保存所有所需信息(品牌、链接、类别)的属性和第一个<img>标记。

对于分页,似乎可以通过添加p=<page number>转到下一个页面&当页面不存在时,它会重定向到第一个页面。这里的一个解决方法是检查响应url,并检查它是否与您请求的url相同。如果相同,你可以增加页码,否则你已经抓取了所有的页面

代码语言:javascript
复制
from bs4 import BeautifulSoup
import urllib.request

count = 1
url = "https://www.sociolla.com/142-nails?p=%d"

def get_url(url):
    req = urllib.request.Request(url)
    return urllib.request.urlopen(req)

expected_url = url % count
response = get_url(expected_url)

results = []

while (response.url == expected_url):
    print("GET {0}".format(expected_url))
    soup = BeautifulSoup(response.read(), "html.parser")

    products = soup.find("div", attrs = {"id" : "product-list-grid"})

    results.append([
        (
            t["data-eec-brand"],    #brand
            t["data-eec-category"], #category
            t["data-eec-href"],     #product link
            t["data-eec-name"],     #product name
            t["data-eec-price"],    #price
            t.find("img")["src"]    #image link
        ) 
        for t in products.find_all("div", attrs = {"class" : "product-item"})
        if t
    ])

    count += 1
    expected_url = url % count
    response = get_url(expected_url)

print(results)

在这里,结果存储在results中,这是一个元组数组

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51106832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档