爬虫小记:商品本地链接和天猫链接进行比较,返回标题是否相同并写入Excel

商品本地链接和天猫链接进行比较,返回标题是否相同并写入Excel

最原始Excel文件
运行后生成的新的Excel文件

导入代码需要的第三方库 这里主要运用到 xlutils.copy,xlrd,pandas

import pandas as pd
from lxml import  etree
import requests
import  time
import  random
import numpy as np
from xlutils.copy import copy
import xlrd

导入excel文件所要使用到的列,含有不同的商品链接地址用循环获取

def read_excel():
    for i in range(0,2):
        df = pd.read_excel(fillname, usecols=[i], names=None)
        data_li = df.values
        datas=[]
        for url  in data_li:
            datas.append(url[0])
        for info in datas:
            get_info(info,i)
        time.sleep(2)

通过利用headers_lists构造不同的浏览器>防止反爬

def get_info(url,i):
        headers_lists=('Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
                        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
                        'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0')

通过遍历请求不同列的地址内容,根据每列请求内容和方式设计了if表达式

    if (i == 0):
        res = requests.get(url=url, headers={"User-Agent": random.choice(headers_lists)})
        selector = etree.HTML(res.text)
        title = selector.xpath('normalize-space(//div[@id="J_Title"]/h3[@class="tb-main-title"]/text())')
        list0.append(title)
    if (i == 1):
        try:
            res = requests.post(url=url, headers={"User-Agent": random.choice(headers_lists)})
            selector = etree.HTML(res.text)
            title = selector.xpath('normalize-space(//div[@id="J_DetailMeta"]/div[1]/div[1]/div[1]/div[1]/h1/text())')
            list1.append(title)
        except:
            list1.append('空') #这里当请求地址错误,或者抓取出错,将显示为空

将获取的两个商品标题进行比较是否相同得到bool类型数组

def compare_data(list0,list1):
    comp_list0 = np.array(list0)
    comp_list1 = np.array(list1)
    result=(comp_list0 == comp_list1)
    list2 = []
    for i in result:
        list2.append(i)
    write_excel(list2)

将获取的数组表示为追加写入文件,利用copy函数。特别注意这里要重新命名,不然会报错!!!

def write_excel(list2):
    oldWb = xlrd.open_workbook(fillname)
    newWb = copy(oldWb)
    newWs = newWb.get_sheet(0)
    for i in range(len( list2)):
        newWs.write(i + 1, 3,  str(list2[i]))
    print("write new values ok")
    newWb.save("new1.xls")

最后为本代码执行入口

if __name__ == '__main__':
    fillname = 'new2.xls'
    list0 = []
    list1 = []
    read_excel()
    compare_data(list0,list1)

该代码为爬虫新手小写,用于学习,涉及到的信息为自己使用不得转让别人,不好的地方请大佬勿喷,嘿嘿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值