定向爬虫实验报告
一、概述
爬虫是一组客户端程序,它的功能是访问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库正则表达式处理数据。通过运用两种库方法,我成功爬取到淘宝上书包的名称和价格,并顺利打印在屏幕上。