zoukankan      html  css  js  c++  java
  • (一)爬取淘宝页面信息

    淘宝商品信息定向爬虫

    标签(空格分隔):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}	{1:^20}	{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

  • 相关阅读:
    php基本语法
    php的环境搭建
    Java数组及其内存分配
    最快的maven镜像
    配置maven到运行
    配置maven
    maven的eclise配置
    mysql中bit_count和bit_or函数的含义
    怎样查看MySQL是否区分大小写
    linux忘记mysql密码找回方法
  • 原文地址:https://www.cnblogs.com/HLBBLOG/p/12304183.html
Copyright © 2011-2022 走看看