Python爬取网络数据,并保存到数据库

我用Python爬取煎蛋网数据,因为煎蛋网的图片地址做了处理,我们不能直接获取图片路径

import pymysql
from bs4 import BeautifulSoup
from selenium import webdriver

# 这是防止频繁请求网页而被断开连接
driver = webdriver.PhantomJS()

# 这是煎蛋网的网址,那个page煎蛋网上是不固定的,所以,随便取就好了
BaseUrl = ["http://jandan.net/ooxx/page-{}#comments".format(str(i)) for i in range(50689300, 50689350)]

# 打开数据库连接
db = pymysql.connect('localhost', 'root', 'new password', 'beautiful_girl')

# 创建一个游标对象
cursor = db.cursor()

# 创建SQL语句
sql = '''INSERT INTO PICTURE(ID, IMGURL)VALUES(%s, '%s')'''

# 创建一个保存数据的列表
img = []


def catch():
    # 创建ID值
    Id = 1
    # 循环地址,抓取不止一个网页的数据
    for url in BaseUrl:
        # 抓取第一步
        driver.get(url)
        data = driver.page_source
        # 用来解析网页源码
        soup = BeautifulSoup(data, "html.parser")
        # 将所有div标签 class属性为row的所有标签
        all_data = soup.find_all("div", attrs={'class': 'row'})
        # 循环将这些标签取出来
        for j in all_data:
            # 将里面所有a标签 class属性为view_img_link的所有标签取出来
            img_url = j.find('a', attrs={'class': 'view_img_link'})
            # 去处a标签中的所有图片路径
            link = img_url.get('href')
            if link is None:
                return
            # 将图片路径保存到列表中
            img.append(link)
            print(link)

    # 循环将图片取出来
    for i in img:
        try:
            # 保存到数据库
            cursor.execute(sql % (Id, i))
            db.commit()
        except:
            db.rollback()
        Id += 1
    db.close()


catch()

 

好的,以下是我提供的一些爬取京东网页并将数据传入数据库,用pyecharts展示数据的步骤: 1. 导入所需的库 ```python import requests from pyquery import PyQuery as pq import pymysql from pyecharts import options as opts from pyecharts.charts import Bar ``` 2. 连接数据库并创建表格 ```python # 连接数据库 db = pymysql.connect(host='localhost', user='root', password='password', database='test', port=3306) cursor = db.cursor() # 创建表格 sql = """ CREATE TABLE IF NOT EXISTS `jd_goods` ( `id` int(10) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `price` float NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; """ cursor.execute(sql) db.commit() ``` 3. 定义爬取函数并解析数据 ```python def get_jd_info(keyword): url = 'https://search.jd.com/Search?keyword={}&enc=utf-8'.format(keyword) 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'} r = requests.get(url, headers=headers) html = r.text doc = pq(html) items = doc('.gl-item').items() data = [] for item in items: title = item.find('.p-name em').text().replace('\n','') price = item.find('.p-price i').text() data.append({'title':title, 'price':price}) return data ``` 4. 将数据存入数据库 ```python keyword = '手机' data = get_jd_info(keyword) sql = "INSERT INTO jd_goods(title, price) VALUES(%s, %s)" for item in data: try: cursor.execute(sql, (item['title'], float(item['price']))) db.commit() except: db.rollback() ``` 5. 从数据库中获取数据并用pyecharts可视化 ```python # 从数据库中获取数据 sql = "SELECT * FROM jd_goods" cursor.execute(sql) results = cursor.fetchall() prices = [item[2] for item in results] titles = [item[1] for item in results] # 使用pyecharts绘制柱状图 bar = ( Bar() .add_xaxis(titles) .add_yaxis("价格", prices) .set_global_opts(title_opts=opts.TitleOpts(title="{}价格分布".format(keyword))) ) bar.render("{}.html".format(keyword)) ``` 以上是一个简单的例子,你可以根据自己的需求对代码进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值