python 爬取京东 商品数据

sqlite_utils.py

import sqlite3

# 初始化数据库
def init_connection():
    connect = sqlite3.connect('jd.db')
    connect.execute('''CREATE TABLE product(
           id INTEGER PRIMARY KEY AUTOINCREMENT     NOT NULL,
           p_name           TEXT    NOT NULL,
           p_price            INT     NOT NULL,
           p_shop        CHAR(200)
           );''')


def get_connection():
    connect = sqlite3.connect('jd.db')
    return connect


# 插入一条数据
def insert_product(connect, p_name, p_price, p_shop):
    sql = "INSERT INTO product (p_name, p_price, p_shop) VALUES ('" + p_name + "'," + p_price + ",'" + p_shop + "')"
    connect.execute(sql)
    connect.commit()


if __name__ == '__main__':
    init_connection()
    connection = get_connection()
    # connection.execute("INSERT INTO product (p_name, p_price, p_shop) VALUES ('hello',1,'world')")
    # connection.commit()
    connection.close()

spider.py

import requests
from bs4 import BeautifulSoup
import sqlite_utils

def start():
    # 用来存储数据的sqlite
    connection = sqlite_utils.get_connection()
    base_url = "https://search.jd.com/Search?keyword=笔记本散热"

    # GET类型请求(不允许重定向,以此来判断是否到最后一页)
    get_result = requests.get(base_url, allow_redirects=False)
    page_num = -1
    # 爬取所有的页
    for i in range(1, 100):
        page_num = page_num + 2
        print("总页数:100   当前爬取页:" + str(page_num))
        url = base_url + "&page=" + str(page_num)
        result = requests.get(url, allow_redirects=False)
        # 指定html解析器,以适应在不同环境下运行
        soup1 = BeautifulSoup(result.text, "html.parser")
        scenery_list = soup1.find_all(name="div", attrs={"class": "gl-i-wrap"})
        for scenery in scenery_list:
            text = str(scenery)
            soup1 = BeautifulSoup(text, "html.parser")

            product_name = soup1.find(name="div", attrs={"class", "p-name p-name-type-2"})
            if product_name is None:
                continue
            product_name_str = product_name.find(name="em").text
            product_price = soup1.find(name="div", attrs={"class", "p-price"})
            if product_price is None:
                continue
            product_price_str = product_price.find(name="i").text
            product_shop = soup1.find(name="span", attrs={"class", "J_im_icon"})
            if product_shop is None:
                continue
            product_shop_str = product_shop.find(name="a").text
            sqlite_utils.insert_product(connection, product_name_str, product_price_str, product_shop_str)
    # 关闭文件
    connection.close()


if __name__ == '__main__':
    try:
        start()
    except OSError:
        pass
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以,以下是一个简单的Python程序,可以使用 BeautifulSoup 和 requests 库来爬取京东商品数据: ```python import requests from bs4 import BeautifulSoup # 设置请求头信息 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} # 输入要搜索的商品名称 keyword = input("请输入商品名称:") # 构造请求URL url = "https://search.jd.com/Search?keyword=" + keyword # 发送请求并获取响应内容 response = requests.get(url, headers=headers) # 使用 BeautifulSoup 解析响应内容 soup = BeautifulSoup(response.text, "html.parser") # 获取商品列表 goods_list = soup.select("#J_goodsList > ul > li") # 遍历商品列表并输出商品的名称、价格和链接 for goods in goods_list: name = goods.select(".p-name em")[0].text.strip() price = goods.select(".p-price i")[0].text link = "https:" + goods.select(".p-name a")[0]["href"] print("商品名称:", name) print("商品价格:", price) print("商品链接:", link) print("----------------------") ``` 在这段代码中,我们首先设置请求头信息,以便能够成功发送请求。然后我们让用户输入要搜索的商品名称,使用该名称构造请求URL,并发送请求。接下来,我们使用 BeautifulSoup 解析响应内容,获取商品列表,并遍历商品列表,输出商品的名称、价格和链接。 请注意,这只是一个简单的示例程序,它只能获取一页搜索结果。如果您想要获取更多的结果,您需要编写更复杂的代码来处理分页。另外,请注意,京东的网站结构可能会发生变化,因此这段代码可能无法长期运行,您需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值