定向爬虫实验报告

一、概述

爬虫是一组客户端程序,它的功能是访问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)整体代码如下:

PYTHON爬虫实验报告原理 爬虫实验报告怎么写_python

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)整体代码如下:

PYTHON爬虫实验报告原理 爬虫实验报告怎么写_PYTHON爬虫实验报告原理_02

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)整体代码如下:

PYTHON爬虫实验报告原理 爬虫实验报告怎么写_爬虫_03

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)整体代码如下:

PYTHON爬虫实验报告原理 爬虫实验报告怎么写_PYTHON爬虫实验报告原理_04

8)运行结果如下:

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

PYTHON爬虫实验报告原理 爬虫实验报告怎么写_开发语言_05

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

PYTHON爬虫实验报告原理 爬虫实验报告怎么写_python_06

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

PYTHON爬虫实验报告原理 爬虫实验报告怎么写_python_07

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

PYTHON爬虫实验报告原理 爬虫实验报告怎么写_爬虫_08

三、总结

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