我们在网购的时候经常会使用一些网络平台,淘宝是一个重要的平台.
我们买东西都需要在淘宝上进行一些搜索.
功能描述
目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格
理解:淘宝的搜索接口,怎么通过程序向淘宝提交请求并获得返回的结果
翻页的处理
技术路线:requests‐bs4‐re
例如,搜索“书包”
起始页:https://s.taobao.com/search?q=书包&js=1&stats_click=search_radio_all%
3A1&initiative_id=staobaoz_20170105&ie=utf8
第2页:https://s.taobao.com/search?q=书包&js=1&stats_click=search_radio_all%
3A1&initiative_id=staobaoz_20170105&ie=utf8&bcoffset=0&ntoffset=0&p4pp
ushleft=1%2C48&s=44
第3页:https://s.taobao.com/search?q=书包&js=1&stats_click=search_radio_all%
3A1&initiative_id=staobaoz_20170105&ie=utf8&bcoffset=‐3&ntoffset=‐
3&p4ppushleft=1%2C48&s=88
每页44个商品
通过对例子的分析,我们得到了搜索接口和翻页的URL对应属性
定向爬虫的可行性
https://s.taobao.com/robots.txt
User‐agent: *
Disallow: /
所以淘宝的搜索页面是不允许爬虫对它进行爬取的
请注意:这个例子仅探讨技术实现,请不要不加限制的爬取该网站
程序的结构设计
步骤1:提交商品搜索请求,循环获取页面
步骤2:对于每个页面,提取商品名称和价格信息
步骤3:将信息输出到屏幕上
实例编写
import requests
import re
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
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)
for i in range(len(plt)):
price = eval(plt[i].split(':')[1])
title = eval(tlt[i].split(':')[1])
ilt.append([price , title])
except:
print("")
def printGoodsList(ilt):
tplt = "{:4}\t{:8}\t{:16}"
print(tplt.format("序号", "价格", "商品名称"))
count = 0
for g in ilt:
count = count + 1
print(tplt.format(count, g[0], g[1]))
def main():
goods = 'Python'
depth = 3
start_url = 'https://s.taobao.com/search?q=' + goods
infoList = []
for i in range(depth):
try:
url = start_url + '&s=' + str(44*i)
html = getHTMLText(url)
parsePage(infoList, html)
except:
continue
printGoodsList(infoList)
main()
总结
采用requests‐re路线实现了淘宝商品比价定向爬虫
熟练掌握正则表达式在信息提取方面的应用