100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 网络定向爬虫实例---淘宝商品信息比价

网络定向爬虫实例---淘宝商品信息比价

时间:2022-09-28 02:41:10

相关推荐

网络定向爬虫实例---淘宝商品信息比价

目录

一.前言:二.前期准备:1.如何绕过防爬虫2.一些常见的问题及处理方法: 三.爬虫实例结构分析:1.主体结构:2.分析:(1)爬虫可行性:(2)网站数据结构 四.爬虫实例展示:1.爬虫实例代码:2.运行效果图:

一.前言:

网络爬虫有许多种类,其中定向爬虫是比较常见的,而我们在淘宝购物,会发现有很多商品信息,如何才能信息汇总显示,如何联系爬虫与生活,下面介绍一个定向爬虫实例–淘宝商品信息比价定向爬虫。

通过本实例的python代码实现,我们可以通过所想查找的的商品名称相关需求,来获得淘宝商品信息的汇总显示,从而方便我们的购物。另外,我们还可以增加更多功能或内容,如增加发货地,购买数量或是按价格或热度进行排序等等,所以,我们要继续学习去完善它。

二.前期准备:

1.如何绕过防爬虫

(1)现在由于许多无限制的爬虫引起的许多问题,许多网站禁止爬虫或增加了不少的反爬虫措施,淘宝网站也是这样。一般地用requests库进行爬取访问时,我们所得到的网页可能是淘宝账号登入页面或警告爬虫访问的提示网页,那么我们如何从学习爬取技能的实现角度去爬取该网站(千万不要不加限制和高频率的爬取,造成服务器的困扰),下面一一解释。

(2)首先要有能登入淘宝的账号,账号登入淘宝网后,按F12或检查网页,会出现以下画面,然后点击最顶的Network的标签栏,按F5刷新以下,在左侧name栏下的第一个有search的一行点击右键,依次点击Copy->copy as cURL(bash),然后打开该网站/(比较方便的转换网站),复制到左边边框,按回车或自动转换,然后复制右边边框内所要复制的信息(headers,params等),将转换后的headers,params放入代码中,替换requests相应的headers,params。步骤见下图:

2.一些常见的问题及处理方法:

在Python字符串里嵌入双引号或者单引号

超详细总结:python的转义字符及用法

PYTHON爬虫神站

三.爬虫实例结构分析:

1.主体结构:

(1)提交商品搜索请求,循环获取页面;

(2)对于每个页面,提取商品名称和价格信息

(3)将信息输出到屏幕上

(4)主函数部分(含搜索名称,页面数目)

2.分析:

(1)爬虫可行性:

淘宝链接:/

爬虫协议链接:/robots.txt

User-agent: Baiduspider

Disallow: /

User-agent: baiduspider

Disallow: /

很遗憾,我们不能爬取该网站,但是还可以低频率地去爬取(关注技术手段的实现)。

(2)网站数据结构

由于不同类型的网站的数据结构不同,所以我们爬取时,首先先分析该网站的数据网络结构,打开淘宝,搜索书包,依次点击:右键-> 查看网页源代码->Crtl F查找->搜索任意商品的名称和价格->定位显示。经过分析可以发现,我们要爬取的商品名称和价格在网页是如下图显示的:

经过分析可知,商品价格是以"view_price":对应的键值对对应的键值,商品名称是以"raw_title":对应的键值对对应的键值,那么我们可以构造对应的正则表达式。

四.爬虫实例展示:

1.爬虫实例代码:

import requestsimport re#由于直接用re库findall函数直接匹配,所以直接跳过网页解析,故不用BeautifulSoup库def getH(url):#爬取淘宝网页功能模块try:#由于淘宝的防爬虫,所以将request对象中相应替换为以下headers,paramsheaders = {'authority': '','cache-control': 'max-age=0','upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400','accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','referer': '/search?initiative_id=tbindexz_0306&ie=utf8&spm=a21bo.21814703.56-taobao-item.2&sourceId=tb.index&search_type=item&ssid=s5-e&commend=all&imgfile=&q=%E4%B9%A6%E5%8C%85&suggest=history_1&_input_charset=utf-8&wq=shu&suggest_query=shu&source=suggest','accept-encoding': 'gzip, deflate, br','accept-language': 'zh-CN,zh;q=0.9','cookie': 'cna=ykA8F8wwIhQCAXjnD2rV02VA; thw=cn; miid=139266461975127532; tg=0; tracknick=tb974603328; enc=9rD7NaiAOUBdZvdWQJKIu%2FGUAgOAk65Nba4MYm69MZXo7Ray9ygdQKPd2XuvRQVGqR7GH0gTbvJ7m8%2FsZtqtPw%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; xlly_s=1; t=122c996eaa771df2b9c5212871285f7f; lgc=tb974603328; mt=ci=16_1; sgcookie=E100jPR1J1pPkevdV2ZFyz%2FwUfWmW459FG7Szveibx30jPnr6QhkbdUtUo1RYJxZsUoZTFEjH8DwOvGNeU%2FeZsoRBA%3D%3D; uc3=id2=UNXzhB78YNdetg%3D%3D&nk2=F5RMHl6xd4zYCPg%3D&vt3=F8dCuwlBgA1irZ%2FnGlc%3D&lg2=WqG3DMC9VAQiUQ%3D%3D; uc4=nk4=0%40FY4HWyt7MS8T1L4kAACP7268%2F0kspA%3D%3D&id4=0%40UgJ2Y4N%2FZKxvkyJHZOxSebXBePGq; _cc_=UIHiLt3xSw%3D%3D; _m_h5_tk=37da3632b58750c3203d7d8e4cf1695d_168583219; _m_h5_tk_enc=d2e8836b07c7990128a398c9946d84d5; cookie2=1aa0712425dc9a6ee1b357eb62a1006b; _tb_token_=fee336363e833; _samesite_flag_=true; uc1=cookie14=Uoe2zXos9oCAhQ%3D%3D; isg=BFtbaBbCv23kbP0jbwSMGjbr_7_FMG8yu7vjuE2YK9pxLHsO1QLTgqauxoyiC8cq; tfstk=cbVPB3OR-_CzDWcCBbGeP4vIsRURwphn6nuIE-PzBybbd4f0ZH3XhxMqCaTSE; l=eBadA9elQG1Z3WlzBOfanurza77OSLAYYuPzaNbMiOCP_21B5_aRW61nuTY6C3GVh6mBR3S3Hn4XBeYBqQAonxvtIosM_Ckmn','if-none-match': 'W/"1ad3f-vhpNj3xbY9jPgO6OC6hl7aXIaHE"',}params = (('spm', 'a230r.1.1581860521.1.644e68b8B8D5oo'),)r = requests.get(url, headers=headers, params=params)r.raise_for_status()r.encoding=r.apparent_encodingreturn r.textexcept:return ""def parseH(ils, html): #将爬取内容转化为相应的数据结构的功能模块try:p = re.findall(r'"view_price":"[\d.]*"', html)#re库的r.text表示方式t = re.findall(r'"raw_title":".*?"', html)for i in range(len(p)):price = eval(p[i].split(':')[1])title = eval(t[i].split(':')[1])ils.append([price, title])except:print("")def printH(ils):temp = "{0:^6}\t{1:^8}\t{2:{3}^16}"#模板print(temp.format("序号", "价格", "商品名称",chr(12288)))count = 0for l in ils:count = count + 1print(temp.format(count, l[0], l[1],chr(12288)))def main():sth=input("请输入要查找的商品名称:")pages=int(input("请输入要爬取的页面数:"))#不建议爬取页面过多,以免造成页面崩溃aurl = '/search?q=' + sthinlist = []for i in range(pages):#对爬取每一页遍历,然后对每一页进行单一处理try:url = aurl + '&s=' + str(44 * i) #以爬取的每一页的URL进行访问爬取html = getH(url)parseH(inlist, html)except:continueprintH(inlist)main()

2.运行效果图:

文中如有不足,欢迎指正,谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。