python淘宝商品比价定向爬虫

要求(目标)

利用requests、re库爬取 淘宝商品搜索“机械键盘”页面前两页,将商品价格、商品名称按顺序表格形式输出


实现代码

#CorwTaoBaoPrice.py
import requests
import re

#获取页面函数
def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding=r.apparent_encoding #需要手工判断 r.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) #同上
        for i in range(len(plt)):
            price=eval(plt[i].split(':')[1])   #利用eval将最外层双、单引号去掉,利用split分割,获得后半部分
            title=eval(tlt[i].split(':')[1])   #同上
            ilt.append([price,title])
    except:
            print("")

#将淘宝上信息输出到屏幕上
def printGoodsList(ilt):
    tplt="{:4}\t{:8}\t{:16}"  #定义打印格式
    print(tplt.format("序号","价格","商品名称"))  #表头
    count=0              #计数,表明序号
    for g in ilt:
        count=count+1
        print(tplt.format(count,g[0],g[1]))

#主函数程序运行过程
def main():
    goods='机械键盘' #搜索关键词定义变量goods
    depth=3         #设定向下一页爬取深度
    start_url='http://s.taobao.com/search?q='+goods  #通过对goods的检索
    infoList=[]          #输出结果定义变量
    for i in range(depth):      #对每一个页面进行处理
        try:
            url=start_url+'&s='+str(44*i)  #对每一个url链接进行设计(需要寻找url之间的规律)
            html=getHTMLText(url)
            parsePage(infoList,html)       #处理每个页面的解析过程
        except:
            continue
    printGoodsList(infoList)
main()

拓展

输出序号,价格,销量,店铺名称,店铺地点,商品名称。(熟悉正在表达式的使用)

import requests
import re

def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()
        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)
        slt=re.findall(r'\"nick\":\".*?\"',html)
        llt=re.findall(r'\"item_loc\":\".*?\"',html)
        salt=re.findall(r'\"view_sales\":\".*?\"',html)
        for i in range(len(plt)):
            price=eval(plt[i].split(':')[1])
            title=eval(tlt[i].split(':')[1])
            shopname=eval(slt[i].split(':')[1])
            local=eval(llt[i].split(':')[1])
            sales=eval(salt[i].split(':')[1])
            ilt.append([price,sales,shopname,local,title])
    except:
            print("")

def printGoodsList(ilt):
    tplt="{:4}\t{:8}\t{:16}\t{:26}\t{:16}\t{:16}"
    print(tplt.format("序号","价格","销量","店铺名称","店铺地点","商品名称"))
    count=0
    for g in ilt:
        count=count+1
        print(tplt.format(count,g[0],g[1],g[2],g[3],g[4]))

def main():
    goods='机械键盘'
    depth=4
    start_url='http://s.taobao.com/search?q='+goods
    infoList=[]
    for i in range(depth):
        try:
            url=start_url+'&s='+str(44*i)
            html=getHTMLText(url)
            parsePage(infoList,html)
        except:
            continue
    printGoodsList(infoList)
main()

 

你可能感兴趣的:(学习,python,笔记,网络爬虫)