功能描述

image.png

分析URL

在淘宝页面的搜索栏中,键入关键字,获取相关的URL并进行分析
image.png
image.png

查看robots.txt

image.png
虽然对所有的user-agent限制根目录下的信息,即网站的所有信息都不能爬取,但我们模仿的是人类的访问,不是多次骚扰性质的访问,所以还是可以继续的

程序设计

  1. import requests
  2. import re
  3. def getHTMLText(url):
  4. try:
  5. r = requests.get(url, timeout=30)
  6. r.raise_for_status()
  7. r.encoding = r.apparent_encoding
  8. return r.text
  9. except:
  10. return ""
  11. def parsePage(ilt, html):
  12. try:
  13. plt = re.findall(r'\"view_price\"\:\"[\d\.] *\"', html)
  14. tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)
  15. for i in range(len(plt)):
  16. price = eval(plt[i].split(':')[1])
  17. title = eval(tlt[i].split(':')[1])
  18. ilt.append([price, title])
  19. except:
  20. print("")
  21. def printGoodsList(ilt):
  22. tplt = "{:4}\t{:8}\t{:16}"
  23. print(tplt.format("序号", "价格", "商品名称"))
  24. count = 0
  25. for g in ilt:
  26. count += 1
  27. print(tplt.format(count, g[0], g[1]))
  28. print("")
  29. def main():
  30. goods = '书包'
  31. depth = 2 # 爬取的深度,即页数
  32. start_url = 'https://s.taobao.com//search?q=' + goods
  33. info_list = []
  34. for i in range(depth):
  35. try:
  36. url = start_url + '&s=' + str(44*i)
  37. html = getHTMLText(url)
  38. parsePage(info_list, html)
  39. except:
  40. continue
  41. printGoodsList(info_list)
  42. if __name__ == '_main__':
  43. main()

parsePage()函数的一般设计方法

在页面中查看源代码,对于商品所要的特征值进行提取,在源代码中的页面进行搜索,在这个例子中我们选择的是价格
image.png
所以我们可以在网页源码中搜索‘129.00’,得到如下结果
image.png
我们发现,价格对应的标签名字叫做“view_price”
用同样的方法对商品名进行搜索,得到商品名对应的标签名叫“raw_title”image.png

为什么不使用bs4库

我们看到我们需要的信息是以json格式进行组织的,而不是像前面是在HTML标签中进行结构化组织的。而对于这种字符串的匹配,我们使用正则表达式进行匹配,也是很合适的

BUT

现在淘宝需要登陆才能查看页面信息,所以,程序还是有待提升