HLBBLOG

淘宝商品信息定向爬虫


功能描述

(1)目标:获取淘宝搜索页面信息,提取其中商品的名称和价格
(2)技术路线:Requests-Re


接口描述

(1)搜索接口:https://s.taobao.com/search?q=关键词
(2)翻页接口:第二页 https://s.taobao.com/search?q=关键词&s=44
     第三页 https://s.taobao.com/search?q=关键词&s=88


获取headers和cookie

(1)使用chrome打开淘宝网站,登陆自己的账户,对某一关键词进行搜索
(2)点击F12,打开开发者工具,其中有四个功能模块:元素(ELements)、控制台(Console)、源代码(Sources),网络(Network)。(在此只用上元素和网络)
(3)点击网络(Network),按F5进行刷新,选择第一个search?开头的。右键打开点击copy,选择copy as curl(bash).
(4)点击进入https://curl.trillworks.com/
(5)将copy as curl(bash)获得的代码黏贴进去即可获得headers和cookie。


具体代码

import requests
import re
def gethtml(url): #定义获取url的函数
    try:
        header = {
            \'authority\': \'s.taobao.com\',
            \'cache-control\': \'max-age=0\',
            \'upgrade-insecure-requests\': \'1\',
            \'user-agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36\',
            \'sec-fetch-dest\': \'document\',
            \'accept\': \'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\',
            \'sec-fetch-site\': \'same-origin\',
            \'sec-fetch-mode\': \'navigate\',
            \'sec-fetch-user\': \'?1\',
            \'referer\': \'*\',#*是referer的内容,这里隐去了。
            \'accept-language\': \'zh-CN,zh;q=0.9\',
            \'cookie\': \'*\',#*是cookie的内容,这里隐去了。
        }
        t=requests.get(url,headers=header)
        t.encoding=t.apparent_encoding
        t.raise_for_status()
        return t.text
    except:
        print(\'爬取失败\')
        return \'\'

def perpage(list,html):
    try:
        plt=re.findall(r\'\"view_price\":\"\d+\.\d*\"\',html)#在元素中使用搜索,发现价格在view_price:后,因此使用正则表达式
        llt=re.findall(r\'\"raw_title\":\".*?\"\',html)#同上
        l=len(plt)
        print(\'该页面有\',l,\'个商品\')
        for i in range(l):
            price=eval(plt[i].split(\':\')[1])
            title=eval(llt[i].split(\':\')[1])
            list.append([price,title])
    except:
        print(\'解析失败\')
        return \'\'



def printlist(list,num):
    root=\'{0:^20}\t{1:^20}\t{2:^20}\'
    print(root.format(\'序号\',\'价格\',\'商品名称\'))
    count = 0
    for g in list:
        try:
            count = count + 1
            if count<=num:
                print(root.format(count,g[0],g[1]))
        except:
            print(\'打印错误\')
            return \'\'

def main():
    goods=input(\'请输入需要查询的商品名称:\')
    start_url=\'https://s.taobao.com/search?q=\'+goods
    width=eval(input(\'请输入爬取的页码:\'))
    num=eval(input(\'请输入爬取的商品数量:\'))
    list=[]
    for j in range(width):
        try:
            url=start_url+\'&S=\'+str(44*j)
            html = gethtml(url)
            perpage(list, html)
        except:
            continue
    printlist(list,num)

main()

参考

[1] https://blog.csdn.net/Guanhai1617/article/details/104120581
[2]《Python网络爬虫与信息提取》http://www.icourse163.org/course/BIT-1001870001

分类:

技术点:

相关文章: