文章目录
写在前面
这个例子是笔者今天在中国大学MOOC(嵩天 北京理工大学)上学习的时候写下来的。但是很快写完之后我就发现不对劲,因为照着老师的代码写完后运行并不能爬取到信息,经过我的一番折腾,基本解决了问题,并且做了一些优化,写这篇博客记录一下,下图是最终的爬取结果。
一、爬取原页面
爬取页面为淘宝网站,以女装为例,原图如下,由于淘宝商品排名实时更新,所以爬取结果顺序与网站顺序可能会存在不同。本实例爬取的内容为商品的价格和名称,并为其添加序号。
二、编程思路
这一部分嵩天老师在课中给出了讲解,这里我整理分享给大家。
1.功能描述
目标:获取淘宝搜索页面的信息,提取其中的名称和价格。
理解:
(1).获得淘宝的搜索接口
(2).对翻页的处理
技术路线:requests-re
2.程序的结构设计
步骤一:提交商品搜索请求,循环获取页面
步骤二:对于每个页面,提取商品名称和价格信息
步骤三:将信息输出到屏幕上
对应上述三个步骤分别定义三个函数:
(1)getHTMLText()获得页面
(2)parsePage()对每一个获得的页面进行解析
(3)printGoodsList()将商品的信息输出到屏幕上
三、编程过程
1.解决翻页问题
首先我们来看一下前三页分别的URL
对淘宝每一页商品数量的观察我们可以发现,每一页有44个商品,结合上面的结果我们可以猜测,变量s表示的是第二页,第三页…页的起始商品的编号。基于这种规则,我们就可以构建不同页的URL链接。
代码如下:
for i in range(depth):#对每次翻页后的URL链接进行设计
url = start_url + '&s='+str(44*i)
html = getHTMLText(url)
parsePage(infoList,html)
2.编写getHTMLText()函数
def getHTMLText(url):#获得页面
try:
kv = {
'user-agent': 'Mozilla/5.0',
'cookie':' '#请自行获取
}
r = requests.get(url,headers=kv,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
print("获取页面失败")
关于cookie的获取方法,可以参考我的这篇博客
链接: https://blog.youkuaiyun.com/weixin_44578172/article/details/109353017</