[Python-Crawler + Datenanalyse] Sammeln Sie Dateninformationen der E-Commerce-Plattform und erstellen Sie eine visuelle Präsentation


Vorwort

Mit dem Aufkommen von E-Commerce-Plattformen beginnen immer mehr Menschen, online einzukaufen. Für E-Commerce-Plattformen sind Daten wie Produktinformationen, Preise und Bewertungen sehr wichtig. Daher ist die Erfassung von Daten wie Produktinformationen, Preisen und Bewertungen auf E-Commerce-Plattformen zu einer sehr wertvollen Aufgabe geworden. In diesem Artikel wird erläutert, wie Sie mit Python ein Crawler-Programm schreiben, um Produktinformationen, Preise, Bewertungen und andere Daten von E-Commerce-Plattformen abzurufen.

Ich habe einige Python-bezogene Materialien für alle vorbereitet, die Sie mitnehmen können.

Bitte fügen Sie eine Bildbeschreibung hinzu

1. Vorbereitung

Bevor wir mit dem Schreiben des Crawlers beginnen, müssen wir einige Tools und eine Umgebung vorbereiten.

Python3.8
PyCharm

2. Analysieren Sie die Zielwebsite

Bevor wir mit dem Schreiben eines Crawler-Programms beginnen, müssen wir die Struktur und Daten der Zielwebsite analysieren. In diesem Artikel erfassen wir Daten wie Produktinformationen, Preise und Bewertungen von JD.com.

1. Wareninformationen

  1. Zu den Produktinformationen des Einkaufszentrums gehören Produktname, Produktnummer, Produktklassifizierung, Produktmarke, Produktmodell, Produktspezifikation, Produktherkunft, Produktgewicht, Produktverpackung und andere Informationen. Diese Informationen finden Sie auf der Produktdetailseite.

  2. Preis
    Der Warenpreis im Einkaufszentrum umfasst Informationen wie den ursprünglichen Warenpreis, den Warenaktionspreis, den Warenrabatt usw. Diese Informationen finden Sie auf der Produktdetailseite.

  3. Kommentare
    Die Produktbewertungen auf JD.com umfassen Informationen wie Benutzerbewertungen, Benutzerbilder und Benutzer-Folgebewertungen. Diese Informationen finden Sie auf der Produktdetailseite.

3. Schreiben Sie ein Crawler-Programm

Nachdem wir die Struktur und Daten der Zielwebsite analysiert haben, können wir mit dem Schreiben des Crawlers beginnen. In diesem Artikel verwenden wir das Scrapy-Framework, um ein Crawler-Programm zu schreiben und die erfassten Daten in einer MySQL-Datenbank zu speichern.

  1. Erstellen Sie ein Scrapy-Projekt

Zuerst müssen wir ein Scrapy-Projekt erstellen. Geben Sie in der Befehlszeile den folgenden Befehl ein:

scrapy startproject jingdong

Dadurch wird ein Scrapy-Projekt namens jingdong erstellt.

  1. Erstellen Sie einen Crawler

Als nächstes müssen wir einen Crawler erstellen. Geben Sie in der Befehlszeile den folgenden Befehl ein:

scrapy genspider jingdong_spider jd.com

Dadurch wird ein Crawler namens jingdong_spider erstellt, der die Website jd.com crawlt.

  1. Schreiben Sie Crawler-Code

Nachdem wir den Crawler erstellt haben, müssen wir den Crawler-Code schreiben. Im Scrapy-Framework umfasst der Crawler-Code hauptsächlich die folgenden Teile:

(1) Artikel definieren

Item ist ein Konzept im Scrapy-Framework, das zum Definieren der zu crawlenden Datenstruktur verwendet wird. In diesem Artikel müssen wir einen Artikel definieren, um Daten wie Produktinformationen, Preis und Kommentare zu speichern. Fügen Sie in der Datei „items.py“ des Projekts den folgenden Code hinzu:

import scrapy

class JingdongItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()
    sku = scrapy.Field()
    category = scrapy.Field()
    brand = scrapy.Field()
    model = scrapy.Field()
    spec = scrapy.Field()
    origin = scrapy.Field()
    weight = scrapy.Field()
    package = scrapy.Field()
    price = scrapy.Field()
    promotion_price = scrapy.Field()
    discount = scrapy.Field()
    comment = scrapy.Field()
    image_urls = scrapy.Field()
    images = scrapy.Field()

Hier wird ein Artikel namens JingdongItem definiert, einschließlich Produktname, Produktnummer, Produktkategorie, Produktmarke, Produktmodell, Produktspezifikation, Produktherkunft, Produktgewicht, Produktverpackung, Produktpreis, Produktwerbepreis, Produktrabatt, Produktbewertung, Produkt Bild und andere Bereiche.

(2) Schreiben Sie den Crawler-Code.
Öffnen Sie im Spiders-Verzeichnis des Projekts die Datei jingdong_spider.py und fügen Sie den folgenden Code hinzu:

import scrapy
from jingdong.items import JingdongItem

class JingdongSpider(scrapy.Spider):
    name = 'jingdong'
    allowed_domains = ['jd.com']
    start_urls = ['https://www.jd.com/']

    def parse(self, response):
        # 获取所有分类链接
        category_links = response.xpath('//div[@class="category-item"]/div[@class="item-list"]/ul/li/a/@href')
        for link in category_links:
            yield scrapy.Request(link.extract(), callback=self.parse_category)

    def parse_category(self, response):
        # 获取所有商品链接
        product_links = response.xpath('//div[@class="gl-i-wrap"]/div[@class="p-img"]/a/@href')
        for link in product_links:
            yield scrapy.Request(link.extract(), callback=self.parse_product)

        # 获取下一页链接
        next_page_link = response.xpath('//a[@class="pn-next"]/@href')
        if next_page_link:
            yield scrapy.Request(next_page_link.extract_first(), callback=self.parse_category)

    def parse_product(self, response):
        item = JingdongItem()

        # 获取商品名称
        item['name'] = response.xpath('//div[@class="sku-name"]/text()')[0].extract()

        # 获取商品编号
        item['sku'] = response.xpath('//div[@class="itemInfo-wrap"]/div[@class="clearfix"]/div[@class="sku"]/div[@class="item"]/div[@class="name"]/text()')[0].extract()

        # 获取商品分类
        category_list = response.xpath('//div[@class="breadcrumb"]/a/text()')
        item['category'] = '>'.join(category_list.extract())

        # 获取商品品牌
        item['brand'] = response.xpath('//div[@class="itemInfo-wrap"]/div[@class="clearfix"]/div[@class="sku-name"]/a/@title')[0].extract()

        # 获取商品型号
        item['model'] = response.xpath('//div[@class="Ptable"]/div[@class="Ptable-item"]/dl/dt/text()')[0].extract()

        # 获取商品规格
        spec_list = response.xpath('//div[@class="Ptable"]/div[@class="Ptable-item"]/dl/dd/ul/li/text()')
        item['spec'] = ','.join(spec_list.extract())

        # 获取商品产地
        item['origin'] = response.xpath('//div[@class="Ptable"]/div[@class="Ptable-item"]/dl/dd/text()')[0].extract()

        # 获取商品重量
        item['weight'] = response.xpath('//div[@class="Ptable"]/div[@class="Ptable-item"]/dl/dd/text()')[1].extract()

        # 获取商品包装
        item['package'] = response.xpath('//div[@class="Ptable"]/div[@class="Ptable-item"]/dl/dd/text()')[2].extract()

        # 获取商品价格
        price_list = response.xpath('//div[@class="summary-price-wrap"]/div[@class="summary-price J-summary-price"]/div[@class="dd"]/span/text()')
        item['price'] = price_list[0].extract()
        item['promotion_price'] = price_list[1].extract() if len(price_list) > 1 else ''
        item['discount'] = response.xpath('//div[@class="summary-price-wrap"]/div[@class="summary-price J-summary-price"]/div[@class="dd"]/div[@class="promo"]/span/text()')[0].extract()

        # 获取商品评论
        comment_list = response.xpath('//div[@class="comment-item"]')
        comment_text_list = []
        for comment in comment_list:
            comment_text = comment.xpath('div[@class="comment-column J-comment-column"]/div[@class="comment-con"]/div[@class="comment-con-top"]/div[@class="comment-con-txt"]/text()').extract_first()
            if comment_text:
                comment_text_list.append(comment_text.strip())
        item['comment'] = '\n'.join(comment_text_list)

        # 获取商品图片
        item['image_urls'] = response.xpath('//div[@class="spec-items"]/ul/li/img/@src')
        item['images'] = []

        yield item

Hier wird ein Crawler namens JingdongSpider definiert. Zuerst ruft er alle Kategorielinks ab, besucht dann nacheinander jede Kategorieseite, ruft alle Produktlinks ab und besucht dann nacheinander jede Produktseite, greift nach Produktinformationen, Preisen, Bewertungen und anderen Daten usw speichert es. unter Artikel.

(3) Konfigurationsdatenbank

Fügen Sie in der Datei „settings.py“ des Projekts den folgenden Code hinzu:

ITEM_PIPELINES = {
    
    
    'jingdong.pipelines.JingdongPipeline': 300,
}

MYSQL_HOST = 'localhost'
MYSQL_PORT = 3306
MYSQL_USER = 'root'
MYSQL_PASSWORD = '123456'
MYSQL_DBNAME = 'jingdong'

Hier wird eine Pipeline namens JingdongPipeline definiert, die zum Speichern der erfassten Daten in der MySQL-Datenbank verwendet wird. Gleichzeitig werden die Verbindungsinformationen der MySQL-Datenbank konfiguriert.

(4) Pipeline-Code schreiben

Fügen Sie in der Datei „pipelines.py“ des Projekts den folgenden Code hinzu:

import pymysql
from scrapy.exceptions import DropItem
from scrapy.pipelines.images import ImagesPipeline
from jingdong.items import JingdongItem

class JingdongPipeline(object):
    def __init__(self, host, port, user, password, dbname):
        self.host = host
        self.port = port
        self.user = user
        self.password = password
        self.dbname = dbname

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            host=crawler.settings.get('MYSQL_HOST'),
            port=crawler.settings.get('MYSQL_PORT'),
            user=crawler.settings.get('MYSQL_USER'),
            password=crawler.settings.get('MYSQL_PASSWORD'),
            dbname=crawler.settings.get('MYSQL_DBNAME')
        )

    def open_spider(self, spider):
        self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password, db=self.dbname, charset='utf8')
        self.cursor = self.conn.cursor()

    def close_spider(self, spider):
        self.conn.close()

    def process_item(self, item, spider):
        if not isinstance(item, JingdongItem):
            return item

        # 保存商品信息
        sql = 'INSERT INTO product(name, sku, category, brand, model, spec, origin, weight, package, price, promotion_price, discount, comment) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'
        self.cursor.execute(sql, (item['name'], item['sku'], item['category'], item['brand'], item['model'], item['spec'], item['origin'], item['weight'], item['package'], item['price'], item['promotion_price'], item['discount'], item['comment']))
        product_id = self.cursor.lastrowid

        # 保存商品图片
        if item['image_urls']:
            for image_url in item['image_urls']:
                self.cursor.execute('INSERT INTO image(product_id, url) VALUES(%s, %s)', (product_id, image_url))
            self.conn.commit()

        return item

Hier wird eine Pipeline namens JingdongPipeline definiert, die zum Speichern der erfassten Daten in der MySQL-Datenbank verwendet wird. Speichern Sie in der Methode „process_item“ zunächst die Produktinformationen in der Produkttabelle und dann das Produktbild in der Bildtabelle.

(5) Bilddownload konfigurieren

Fügen Sie in der Datei „settings.py“ des Projekts den folgenden Code hinzu:

ITEM_PIPELINES = {
    
    
    'jingdong.pipelines.JingdongPipeline': 300,
    'scrapy.pipelines.images.ImagesPipeline': 1,
}

IMAGES_STORE = 'images'

Hier werden die Pipeline und der Speicherpfad für den Image-Download konfiguriert.

(6) Führen Sie den Crawler aus

Geben Sie in der Befehlszeile den folgenden Befehl ein, um den Crawler auszuführen:

scrapy crawl jingdong

Dadurch wird das Crawler-Programm gestartet und beginnt, Daten wie Produktinformationen, Preise, Bewertungen usw. von Jingdong Mall zu erfassen und in der MySQL-Datenbank zu speichern.

V. Zusammenfassung

In diesem Artikel wird erläutert, wie Sie mit Python ein Crawler-Programm schreiben, um Produktinformationen, Preise, Kommentare und andere Daten von E-Commerce-Plattformen abzurufen. Durch das Studium dieses Artikels können Sie die grundlegende Verwendung des Scrapy-Frameworks verstehen und erfahren, wie die erfassten Daten in der MySQL-Datenbank gespeichert werden. Gleichzeitig erfahren Sie, wie Sie das Verhalten des Browsers simulieren und die Daten dynamischer Seiten erfassen. Ich hoffe, dieser Artikel hilft Ihnen.

↓ ↓ ↓ Finden Sie mich auf der Visitenkarte unten, verschiedene Quellcodes und Fälle ↓ ↓ ↓

Bitte fügen Sie eine Bildbeschreibung hinzu

Supongo que te gusta

Origin blog.csdn.net/weixin_45841831/article/details/131109155
Recomendado
Clasificación