python爬虫初探

在学《机器学习实战》的第八章时,遇到了一个问题,那就是它用爬虫从国外一个二手电商网站上抓取了二手乐高的价格,并使用岭回归的方法对其进行回归分析。但是我之前几乎没有接触过爬虫,所以代码看起来一头问号。

本打算把代码抄上去看下效果再慢慢理解,结果打上去之后并不能运行,找了很久,发现原来是这个API早就失效了(这本书是14年写的)。不过好在网上有很多这本书的学习笔记,从中找了几个文章,然而运行起来还是有各种各样的问题,百度了半天也不知道怎么改。无奈之下,决定从头自学下爬虫,然后自己写程序。

于是查了下,爬虫就是从网页上抓取一些信息,以及与其进行交互。因此需要了解一些前端的知识。比如html标记语言和css以及javascript,简单看了下,html就是使用类如这样的标签语言来静态地描述一个网页,而css用于美化网页,JavaScript则用来添加动态效果。而如果要与网页进行交互的话,就要了解一些服务器与网页的交互规则:http协议。简单来说有两种:
get:向服务器请求资源,一般以明文形式
post:从网页向服务器提交信息,一般以表单的形式

常用的python爬虫工具有三个:
BeautifulSoup:是一款优秀的HTML/XML解析库,它的find_all和find函数非常好用。
requests库:也是一个http库,看了一下,有很多函数,虽然不太明白是干啥用的,但看上去很厉害。
Fiddler工具:这是一个很有用的软件,它可以截获服务器与网页间的通讯,我们可以从这些通讯信息里得到很多信息。

ok,了解了爬虫的基本原理和常用工具,就可以开始尝试了。

首先,由于待爬网站处于境外,于是第一步是搭一架梯子。在g站找了很久,终于找到一款免费的科学上网工具,兴高采烈地打开书上的网址,发现并不能打开。?满头的问号。梯子是有效的,想了一番后明白,应该是网页已经下架了。怎么办呢,研究了一番后发现原来网上有人有网页的文件,于是下载之。这时候再次体会到学习python和热门的计算机方向的好处。无论是在学习中遇到问题,还是编程时出现了错误,都有数不尽的过来人经验给与帮助,不像以前学习c和c++时,基本只能靠自己领悟。

下载好网页,用浏览器打开。因为这是一个对静态网页的抓取,不需要登陆,且没有任何的反爬虫策略,所以只要找到信息的位置,然后用BeautifulSoup抓取就ok了。

抓取的目标是,得到售出乐高的价格,并检查有无全新标签:全新和非全新的价格有很大的区别。

对其进行查找:
在这里插入图片描述
该网站的结构较简单,每个商品放在一个table标签内,每个td标签存放一个属性。第一项是图片,第二三项没看懂,第四项是出价次数及卖出标记,第五项为出售价格。

(没找到全新标签在哪,还是在网上找到其他人的代码才知道在a标签里,但我打开后还是没找到…)

在a标签里寻找全新标记,确认商品的新旧后,接着确定该商品是否已售出,如果未售,那么就跳过该商品。如果已售,则抓取价格。

因为这里的价格显示带美元符号,所以要使用replace符号将其替换。因为有些商品是散件,但我们只需要全件的信息,因此筛选掉那些价格低于原价一半的商品,然后将信息返回。

在编程时这里出现了几个错误:
首先是显示我得到的价格是string类型,无法与原价比较,这个很简单,强制转换就行。
然后第二个问题出现了,在运行到第五件时报错:“could not convert string to float: ‘699.99Free shipping’”。这个问题比较莫名其妙,因为我找到对应的商品发现并没有Free shipping这个后缀,甚至价格也不是699.99。很困惑,研究了一会决定放弃,用replace把它换成空就好。
接着下一个问题是“could not convert string to float: ‘1,050.00’”。这个问题是因为在标记价格时,往往每三位会加一个逗号,然而这个逗号并不能转化为数值。用replace换掉就好。

接下来就是重复输入函数参数,对每个网页文件执行一次调用,就得到了每一年的商品信息,可以用于下一步的分析了。

猜你喜欢

转载自blog.csdn.net/JachinMa/article/details/89167396