人狠话不多,直接上代码,都有详细注释,不多解释
需要安装的包:
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() # 调用主函数