定向爬虫实验报告

定向爬虫实验报告

一、概述

爬虫是一组客户端程序,它的功能是访问web服务器,从服务器中获取网页数据。本次实验是使用urllib.request和re库方法定向爬取淘宝页面数据,以关键词“书包”搜索页面,在屏幕打印出特定某一页的书包名称及价格,主要对淘宝进行搜索接口和翻页处理。

二、主体

1.本次实验可分为四部分进行,分别为获取淘宝数据、解析淘宝数据、打印淘宝数据、运行主程序。

2.导入urllib.request程序包、re库。

import urllib.request
import urllib.parse
import re

3.获取网页数据

1)定义函数get_data获取淘宝数据:

def get_data(url):

2)设置headers信息,模拟浏览器访问淘宝
3)使用urllib.request程序包访问并打开淘宝:

req = urllib.request.Request(url, headers=headers)
data = urllib.request.urlopen(req)

4)读取淘宝数据信息:

data = data.read()

5)将网页中的二进制数据转换为字符串,转换编码为 UTF-8:

data = data..decode()

6)整体代码如下:
在这里插入图片描述

4.解析淘宝数据

1)定义函数deal_data解析淘宝数据:

def deal_data(uinfo, data):

2)使用正则表达式获取书包价格信息:

plt = re.findall(r' " view_price " : " [\d.] * " ', data)

3)使用正则表达式获取书包名称信息:

plt1 = re.findall(r' " raw_title " : " .*? " ', data)

4)通过切片处理字符串:

price = eval( plt [i] .split (':') [1] )
name = eval( plt1 [i] .split (':') [1] )

5)使用append()函数,追加uinfo列表:

uinfo.append( [i + 1, price, name] )

6)整体代码如下:
在这里插入图片描述

5.打印淘宝数据

1)定义函数print_data打印输出结果:

 def print_data(uinfo):

2)格式化输出数据:

 tplt = "{0: ^5}\t{1: ^10}\t{2: ^20}"
 print( tplt.format( "序号", "价格", "商品名称" ) )

3)打印结果:

for i in uinfo:
    print(tplt.format(i[0], i[1], i[2]))

4)整体代码如下:
在这里插入图片描述

6.运行程序

1)定义函数main:

def  main():

2)设置页面序列:

  page = int( input('请输入要获取的页面序列:' ) )

3)设置关键字“书包”进行数据搜索:

  goods = urllib.parse.quote( ' 书包 ' )

4)对淘宝页面设置管理,根据设定的页面序列进行页面自动跳转:

  url = 'https://s.taobao.com/search?q=' + goods + '&bcoffset=1&ntoffset=1&p4ppushleft=2%2C48&s=' \
+ str(44 * (page - 1))

5)定义列表:

 uinfo = []

6)调用函数:

  data = get_data(url)
  deal_data(uinfo, data)
  print_data(uinfo)

7)整体代码如下:
在这里插入图片描述

8)运行结果如下:

淘宝第1页“书包”价格和名称:

在这里插入图片描述

淘宝第2页“书包”前20价格和名称:

在这里插入图片描述

淘宝第3页“书包”前10价格和名称:

在这里插入图片描述

淘宝第4页“书包”前5价格和名称:

在这里插入图片描述

三、总结

通过本次实验,我将学习到的理论知识落实在实践上,加深了我对urllib.request和re库方法的理解,学习了程序包爬取数据的方法,运用了re库正则表达式处理数据。通过运用两种库方法,我成功爬取到淘宝上书包的名称和价格,并顺利打印在屏幕上。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值