Python实现信息自动配对爬虫排版程序( 二 )

为了防止反爬的问题 , 设立请求头
header ={'User-Agent': 'Mozilla/5.0 (windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml,like Gecko) Chrome/63.0.3239.132 Safari/537.36'}接着使用xlrd库读取Excel表格 , 按照列对象读取数据
workbook= xlrd.open_workbook(excel_address)sheet =workbook.sheet_by_name("Sheet1")col0 =sheet.col_values(0) # 获取第1列内容,序号那一列col1 =sheet.col_values(1)# 获取第2列内容,物资名称那一列col2=sheet.col_values(2)#获取第3列内容,型号规格那一列col3=sheet.col_values(3)col4=sheet.col_values(4)col5=sheet.col_values(5)使用lazy_pinyin函数将汉字转为拼音 , 同时保留了音素并保存:
for i in col1: i=lazy_pinyin(i) txt="" for w in i: txt+=w+" " yin.append(txt)print(yin) 根据百度图片搜索图片并爬取保存 。其中为了防止网
页延迟等问题 , 通过多次尝试爬取合适的图片:
numm=for i in range(len(col0)): print("完成了"+str((i/len(col0))*100)+"% 判断读取到的数据是否是数字 , 因为其中有些数据是
空格等等多余的无效数据:
if isinstance(col0[i],float): numm.append(i) t=col1[i]+col2[i] print(t) url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + t + '&ct=201326592&v=flip' result = requests.get(url, headers=header) pic_url = re.findall('"objURL":"(.*?)",', result.text, re.S) num=1 for each in range(len(pic_url)): print('正在下载第' + str(num) + '张图片 , 图片地址:' + str(pic_url[each])) try: pic = requests.get(pic_url[each], timeout=2,headers=header) 保存爬取下来的图片至对应的文件夹中 , 文件夹名为
对应行的序号 。然后设置爬取下来的图片尺寸为300
并保存:
if not os.path.exists("image/"+str(i)): os.makedirs("image/"+str(i)) dir = "image/"+str(i)+"/" + str(num) + '.jpg' fp = open(dir, 'wb') fp.write(pic.content) fp.close try: img = Image.open("image/" +str(i)+"/" + str(num) + '.jpg') img.resize((300, 300)).save("image/" +str(i)+"/" + str(num) + '.jpg') except: pass num += 1 if num == 5: print("下一个 。") result.close break except : print('【换资源中 。。。】') continue 每个货物名称只需要下载爬取四个图片即可:
if num == 5: print("下一个 。") result.close time.sleep(random.randint(0,3)) break 其中download.py运行效果如下:
 

Python实现信息自动配对爬虫排版程序

文章插图
爬取下来的保存部分图片如下:
Python实现信息自动配对爬虫排版程序

文章插图
接着使用xls.py进行排版 。因为这里我们使用xlrd排版
时发现保存的Excel格式都失效了 , 故需要借助
openpyxl库进行原有格式的保存和处理 , 即保存为
新的Excel为8.xlsx 。
import osimport xlrdfrom pypinyin import lazy_pinyin,pinyinfrom openpyxl import load_workbookfrom openpyxl.drawing.image import Image#改文件名的地方excel_address="4.xlsx"wb = load_workbook(excel_address)wb.save("8.xlsx")workbook = xlrd.open_workbook(excel_address)sheet1 = workbook.sheet_by_name("Sheet1")wb = load_workbook('8.xlsx')sheet = wb.get_sheet_by_name('Sheet1')sht = wb.worksheets[0]col0 = sheet1.col_values(0) #获取第1列内容,序号那一列col1 = sheet1.col_values(1)#获取第2列内容,物资名称那一列col2=sheet1.col_values(2)#获取第3列内容,型号规格那一列col3=sheet1.col_values(3)col4=sheet1.col_values(4)col5=sheet1.col_values(5) 


推荐阅读