需求:
1.对于某某商城,爬取其商品名称和商品价格
2.要求:用户动态输入爬取特定商品;
3.爬取结果导入excel表格,并写入数据库中;
思路:
1.查看搜索商品的接口信息,包括接口名称,接口方法(get/post),接口请求参数,及请求头
2.爬取出来的信息,利用正则表达进行抽取有用信息(商品名称,价格)
3.对抽取出来的信息进行拼接及优化展示
4.总共只需三个函数即可,一个利用requests调用搜索接口,获得返回信息,第二个利用re模块去正则表达规则去提取商品名称和价格,第三个优化展示(美观&直观效果)
步骤:
一。第一步:打开F12查看接口信息,取得接口名称,接口调用方法(post),请求头及参数
函数如下:
其中:(1). headers是请求头,字段Authorization是接口授权,是必须的
(2). body是请求参数,字段keywords就是客户输入的搜索词,这边使用input函数目的为了让客户自己输入想搜索的商品
(3). requests.post()即使用post方法,其中html是接口地址,headers是请求头,json是请求参数
二 。第二步,对于返回的信息r.text。我们需要进行提取关键信息:商品名称和商品价格
r.text显示如下:
函数如下:
其中:(1). \"goodsInfoName\":\".*?\"和\"salePrice\":\d+\.?\d?\d?,是正则表达规则,把商品价格和商品名称匹配出来
(2)name里面储存的都是商品名称,price里面存储的都是商品价格,这时我们需要进一步处理,把商品名称和商品价格进行匹配在一起,显示出来类似这样[["salePrice":200.00],["salePrice":199.99]],所以使用split把字段名称salePrice去掉,去后半段的价格。显示为name_iter=[200.00,199.99],price_iter=["商品名称1","商品名称2"]。
(3)最后一行,则是为了把商品名称和商品价格进行组合,显示为targetData=["商品名称1":200.00,"商品名称2":199.99],这就完美了
(4)eval()函数,则是为了去掉一层"",加和不加eval()函数的差别见下图:价格是字符串类型,利用eval()变为整型
三。第三步,把数据展示的更美观
其中:\t是制表符,count起到序号的作用
最终展示结果:
打开爬虫结果.xls,显示如下:
下面附上完整代码:
v1.1
版本更新优化:第三列单元格宽度拉长,且居中显示
显示如下:
V1.2 加入需求:爬出的结果写入数据库,代码如下:
效果如下: