爬取淘宝页面信息

淘宝商品信息定向爬虫

标签(空格分隔):python


功能描述

(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()

猜你喜欢

转载自www.cnblogs.com/HLBBLOG/p/12304183.html