对上一节学习笔记的代码稍作修改,就可以抓取淘宝商品中的销量并保存在txt文件中。
程序步骤:
- 提交商品搜索请求,循环获取页面
- 对每个页面,提取商品名称、价格信息和销量
- 将信息输出txt文件
代码如下:
import requests import re #获取网页 def getHTMLText(url): try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" #使用正则表达式匹配需要的内容 """ 可以在网站源码中看到价格的标签是:"view_sales":"424人付款" 其正则表达式可以表示为:"view_sales":"[d]*人付款" 或者使用数字加汉子匹配,汉子匹配方式如下: [u4E00-u9FA5\s]+ 多个汉字,包括空格 [u4E00-u9FA5]+ 多个汉字,不包括空格 [u4E00-u9FA5] 一个汉字 """ def parsePage(ilt,html): try: plt = re.findall(r'"view_price":"[d.]*"',html) tlt = re.findall(r'"raw_title":".*?"',html) vlt = re.findall(r'"view_sales":"[d]*[u4E00-u9FA5]+"',html) for i in range(len(plt)): price = eval(plt[i].split(':')[1]) title = eval(tlt[i].split(':')[1]) sales = eval(vlt[i].split(':')[1]) ilt.append([price,title,sales]) except: print("") #输出文本内容,这里我将它写入txt文件保存了起来。 def printGoodList(ilt): tplt = "{:4} {:8} {:10} {:16}" with open('bag.txt','w+') as f: f.write(tplt.format("序号","价格","销量","商品名") + ' ') count = 0 for g in ilt: count = count +1 f.write(tplt.format(count,g[0],g[2],g[1]) + ' ') def main(): goods = '书包' depth = 2 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 printGoodList(infoList) main()