一. 淘宝商品信息定向爬虫
二. 爬虫基础:正则表达式
三. 淘宝页面查看与分析
四. 爬虫源码
一. 淘宝商品信息定向爬虫
注意淘宝的robots.txt不允许任何爬虫爬取,我们只在技术层面探讨这一章节的内容。
二. 爬虫基础:正则表达式
完整版正则表达式的详细介绍见本人的这篇博客: 博客链接
三. 淘宝页面查看与分析
功能描述: 目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格 理解:淘宝的搜索接口 翻页的处理 技术路线:requests-re淘宝商品信息起始页 https://s.taobao.com/search?q=%E4%B9%A6%E5%8C%85&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306第二页 https://s.taobao.com/search?q=%E4%B9%A6%E5%8C%85&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=44第三页 https://s.taobao.com/search?q=%E4%B9%A6%E5%8C%85&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=0&ntoffset=6&p4ppushleft=1%2C48&s=88
一. 回到文首
淘宝界面源代码: 我们查看淘宝的源代码:发现,价格字段由’view_price’来标识,商品名称字段由’raw_title’来标识。因此如果我们想要获得这两个信息,只要在获得的文本中检索到其中的view_price和raw_title并把后续的相关内容提取出来即可。从众多的文本中提取我们想要的信息,用正则表达式是非常合适的。另一个重要原因是,淘宝页面的商品信息虽然包含在html页面中,但它是一种脚本语言的体现,并不是完整的html页面的表示,它使用了动态脚本js,所以我们这里bs4库九无能为力了。 按嵩老师给的方法,现在已经不能够爬取内容。
一. 回到文首
现在需要模拟浏览器的header,也可以说是cookie,如下所示: (1):首先登陆自己的淘宝账户 (2):在淘宝首页搜索书包 (3):在下方界面右键点击检查(以Chrome为例) 点击network,然后不要关闭检查界面,点击浏览器的刷新按钮,这时会出现很多文件 在红框文件处右键,选择Copy as cURL(bash)转到网址点击:https://curl.trillworks.com/,不要关闭淘宝界面,因为界面关闭后cookie只能维持一小段时间。关机之后爬取仍需重新粘贴新的headers。
一. 回到文首
将复制内容,粘贴到curl command,可以规范代码格式。再复制Python requests里的
headers
= {
}
里的内容即可,放到自己的代码中。
一. 回到文首
四. 爬虫源码
爬虫源码,在Python环境中运行即可:
import requests
import re
def getHTMLText(url
):
try:
header
= {
'authority': '',
'cache-control': '',
'upgrade-insecure-requests': '',
'user-agent': '',
'accept': '',
'referer': '',
'accept-encoding': '',
'accept-language': '',
'cookie': '',
}
r
= requests
.get
(url
, headers
= header
)
r
.raise_for_status
()
r
.encoding
= r
.apparent_encoding
return r
.text
except:
return ""
def parserPage(ilt
, html
):
"""parserPage()函数用来解析返回的html页面"""
try:
plt
= re
.findall
(r
'"view_price":"\d+\.\d*"', html
)
tlt
= re
.findall
(r
'"raw_title":".*?"', html
)
for i
in range(len(plt
)):
price
= eval(plt
[i
].split
(':')[1])
title
= tlt
[i
].split
(':')[1]
ilt
.append
([price
, title
])
except:
print("")
def printGoodsList(ilt
):
"""printGoodsList()函数打印商品信息"""
tplt
= "{:4}\t{:8}\t{:16}"
print(tplt
.format("序号", "价格", "商品名称"))
count
= 0
for g
in ilt
:
count
+= 1
print(tplt
.format(count
, g
[0], 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
)
parserPage
(infoList
, html
)
except:
continue
printGoodsList
(infoList
)
main
()
注意淘宝的robots.txt不允许任何爬虫爬取,我们只在技术层面探讨这一章节的内容。 仅供教学,请勿对淘宝网造成性能干扰。
一. 回到文首