淘宝商品信息定向爬取实例

该实例主要的问题就是cookie的如何获取。

cookies是保存在浏览器中的来记录我们的信息的,但HTTP协议是一种无状态协议,在数据交换完毕后,服务端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。浏览器开启到关闭就是一次会话,当关闭浏览器时,会话cookie就会跟随浏览器而销毁。
淘宝网cookies的查看方式:淘宝商品信息定向爬取实例
输入自己的账号密码登录,来到淘宝网首页,之后按F12检查元素,然后按下图所示。按下F12之后有可能是一片空白,此时需要再次刷新一下当前网页即可,然后,按下图所示查看Doc文档,你可以把所有的Doc文档都查看一下看看有没有cookie,然后把它复制到Python代码中即可。
淘宝商品信息定向爬取实例
参考代码:

import requests
import re
import csv
def gethtml(url):
    kv={'User_Agent':'Mozilla/5.0'}
    #cookies具有有效期!!!
    path='D:/Python/mycookies.txt'#这里存放的是我登录淘宝网后查看的cookies
    with open(path,'r')as f:
        mycookies=f.read()
    mycookies=mycookies.split(';')
    cookies={}
    for cookie in mycookies:
        name,value=cookie.strip().split('=',1)
        cookies[name]=value
        
    try:
        r=requests.get(url,headers=kv,cookies=cookies,timeout=30)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        print("访问成功")
        return r.text
    except:
        print("访问失败")
        return''
def getpage(data,html):
    try:
        plt=re.findall(r'"view_price":"[d.]*"',html)#商品价格的正则表达式
        tlt=re.findall(r'"raw_title":".*?"',html)#商品名称的正则表达式
        #print(plt)
        for i in range(len(plt)):
            price=eval(plt[i].split(':')[1])
            title=eval(tlt[i].split(':')[1])
            data.append([title,price])
        print('getdata success')
    except:
        print("getdata fail")
def download(data):
    path='D:/Python/my.csv'
    try:
        f = open(path,"w",newline="")
        writer = csv.writer(f)
        writer.writerow(['序号''商品','价格(单位:元)'])
        for i in range(len(data)):
            writer.writerow([str(i),data[i][0],data[i][1]])
        #writer.writerows(data)
        print('='*20,'保存成功','='*20,'n')
    except:
        print('保存失败')
    f.close()
def main():
    keyword=input('请输入爬取的商品的名字:')
    depth=3
    turl='https://s.taobao.com/search?q='+keyword
    infolist=[]
    for i in range(depth):
        try:
            url=turl+"&s="+str(i*44)
            html=gethtml(url)
            getpage(infolist,html)
        except:
            print('warning')
            continue
    download(infolist)
main()
            
        
匿名

发表评论

匿名网友