做任何东西的基本思考过程,莫过于三个过程 what? why? how?
那我们也就从这个三方面来介绍本篇文章:
本爬虫是对用户给定的商品名,在淘宝进行搜索,并且返回一定的商品数目的部分信息。比如价格、链接、商品名称。其他属性读者亦可自行扩展。
首先,做这个东西纯属个人技术学习。前阵子看猪哥的公众号有关爬虫的介绍,又这学期课程也以结束,刚好闲暇。打算学习Python爬虫技术。多一个技术能力绝对不会是什么坏事。所以实现这个爬虫,只单纯为个人练习。
首先我们先通过实际搜索观察到
淘宝的搜索URL接口 = “https://s.taobao.com/search?q=” + sth
Sth即为你要搜索的东西
一般浏览器都有查看网页源代码按键,即在页面空白处鼠标右键,查看网页源代码
如何去获得商品的信息呢,我们首先先从单个入手,在网页源代码中搜索第一个商品的价格。例如我们搜索第一支YSL11的价格335.00
if __name__ == '__main__':
print("请输入你要搜索的东西")
goods = input()
depth = 3
start_url = 'https://s.taobao.com/search?q=' + goods
intoList = []
for i in range(depth):
try:
url = start_url + '&s=' + str(44*i)
html = getHtmlText(start_url)
parsePage(intoList, html)
except:
continue
printGoodsList(intoList)
def getHtmlText(url, code='utf-8'):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
# r.encoding = r.apparent_encoding
# 直接给定编码格式,节约时间
r.encoding = code
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)
id = re.findall(r'\"nid\"\:\"[0-9]+\"', html)
for i in range(len(plt)):
price = eval(plt[i].split(':')[1])
title = eval(tlt[i].split(':')[1])
nid = eval(id[i].split(':')[1])
nid_url = 'https://detail.tmall.com/item.htm?id=' + nid
ilt.append([price, title, nid_url])
print('\r当前进度:{:.2f}%'.format(i*100/len(plt)), end="")
except :
print("")
def printGoodsList(ilt):
print('\n')
tplt = "{:4}\t{:8}\t{:46}\t\t{:16}"
print(tplt.format("序号", "价格", "链接", "商品名称"))
count = 0
for g in ilt:
count = count + 1
print(tplt.format(count, g[0], g[2], g[1]))
既然我写了这个调试部分,也就是上述的代码是存在一定的问题的。首先我们先跑一下。看一下结果。这是因为我们既定的访问的网页不是我们想要的。
打印一下 r.text 我们看到的是这样的。和我们之前查看网页源代码的时候是有很大的出入的。这里通过观察整个网页的代码可以观察处这是要我们进行登陆的。
而我们只需要一些微小但关键的东西就可以避开这个问题了。得到我们想要的了。
Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。
r = requests.get(url, headers=headers_var, timeout=30)