python爬取淘宝搜索页面+url+图片下载并将信息保存到MySQL数据库中

人狠话不多,直接上代码,都有详细注释,不多解释

需要安装的包:
pymysql,用于连接mysql数据库
urllib,爬虫必备包,urllib3也可以

# encoding:utf-8
import re  # 使用正则 匹配想要的数据
import requests  # 使用requests得到网页源码
import pymysql
import urllib
import time
import operator

#已知url下载图片
def getImage(ilt, name):
    for g in ilt:
        namestring = 'E://Download/picture3/' + str(name) + '.jpg'  #存储地址+图片名
        urllib.request.urlretrieve('https:'+g[3], namestring)   #核心下载代码
        name = name + 1   #实现动态命名自增
        # print(name)

#将数据存入mysql中
def data_Import(sql):
    conn=pymysql.connect(host='127.0.0.1',user='root',password='rootadmin',db='test',charset='utf8')    #连接数据库
    conn.query(sql) #插入数据
    conn.commit()
    conn.close()

# 得到主函数传入的链接
def getHtmlText(url):
    try:  # 异常处理
        #  得到你传入的URL链接  设置超时时间3秒
        r = requests.get(url, timeout=3)
        # 判断它的http状态码
        r.raise_for_status()
        # 设置它的编码 encoding是设置它的头部编码 apparent_encoding是从返回网页中分析它的编码格式
        r.encoding = r.apparent_encoding
        # 返回源代码
        return r.text
    except: # 发生异常返回空
        return ''

# 解析你的网页信息
def parsePage(ilt, html):
    # 异常处理
    try:
        # 找到书包的价格
        plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)
        # 找到书包的名称
        tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)
        # 找到书包的地址
        # add = re.findall(r'\"item_loc\"\:\".*?\"', html)
        #nid
        nid = re.findall(r'\"nid\"\:\"[\d]*\"', html)
        # 找到书包的图片链接
        img = re.findall(r'\"pic_url\"\:\".*?\"', html)
        # 销量
        sales = re.findall(r'\"view_sales\"\:\".*?\"', html)
        # print(sales)
     #   print("https://item.taobao.com/item.htm?id="+nid)
        # 得到这个内容放入主函数中的列表
        for i in range(len(plt)):
            price = eval(plt[i].split(':')[1])
            title = eval(tlt[i].split(':')[1])
            address = eval(nid[i].split(':')[1])
            imgs = eval(img[i].split(':')[1])
            sale = eval(sales[i].split(':')[1])
            ilt.append([price, title, address, imgs, sale])
    except:  # 放生异常输出空字符串
        print('')

# 得到主函数传入的列表
def printGoodsList(ilt, name, categoryid):
    # 每个列之间用tplt的放是隔开
    tplt = '{:^4}\t{:^8}\t{:^16}\t{:^16}\t{:^32}\t{:^32}'
    #根据价格从小到大排序^10
    # ilt.sort()
    createtime = '2018-04-03'
    store = '淘宝/天猫'
    for g in ilt:
        sql = """insert into taobao(categoryid,name,price,description,createtime,picture,store,url,monthly_sales) values('%d','%s','%s','%s','%s','%s','%s','%s','%s')""" % (categoryid, pymysql.escape_string(g[1]), g[0], pymysql.escape_string(g[1]), createtime, 'images/upload/' + str(name) + '.jpg', store, "https://item.taobao.com/item.htm?id="+g[2], g[4])
        data_Import(sql)
        # print("恭喜,成功写入"+str(count)+"条数据!")
        name = name + 1  # 图片名称加一

# 定义主函数 main
def main():
    # name = int(time.time()) - 31736  # 获取当前时间的时间戳,避免冲突
    name = 1524632649 + 44
    goods_list = ['时尚套装',485,'皮衣',486,'西装',487,'T恤',488,'原创设计',489,'夹克',490,'休闲裤',491,'牛仔裤',492,'风衣',493,'牛仔外套',494,'棒球服',495,'运动外套',496,'POLO衫',497,'套装',498,'穿搭攻略',499,'长袖睡衣',500,'珊瑚绒睡衣',501,'夹棉睡衣',502,'长筒袜',503,'内衣套装',504,'打底裤',505,'连体睡衣',506,'睡裙女冬',507]
    for i in range(len(goods_list)):
        if i % 2 == 0:
            goods = goods_list[i] # 你要搜索的东西
            categoryid = goods_list[i+1]
            print(goods+":"+str(categoryid))
            depth = 1  # 你想要得到几页的东西
            start_url = 'https://s.taobao.com/search?q=' + goods + '&sort=sale-desc' # 你搜索的网址加上你的搜索东西,以销量排序
            infoList = [] # 自定义的空列表用来存放你的到的数据
            for i in range(depth): # 循环你的页数
                try: # 异常处理
                    url = start_url + '&s' + str(44 * i) # 得到你的网址
                    html = getHtmlText(url) # 得到url传入到你要得到url的函数中
                    parsePage(infoList, html) # 得到你的html源码 放入解析的网页中
                except: # 发生异常跳过
                    continue
            # 把列表中的数据放入解析的函数中
            printGoodsList(infoList, name, categoryid)
            getImage(infoList, name)
            time.sleep(7)  # 休眠5秒
            name = name + 44
            print(name)

main() # 调用主函数
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值