爬取武器类各种属性
Python 爬虫爬取武器过程记录
网站地址:https://wuqi.supfree.net/ufo.asp?classify=tank&page=1
分析网页
- 爬取一种武器类的全部武器网址
- 引用爬取网址爬取武器库中单个武器类中全部武器信息
- 将所得信息进行Excel统计
正则表达式爬取速度最快,用原生手写代码进行爬取。
分析网址:
各种坦克的子网站链接id为坦克名称缩写,因没有规律可循所以第一步将全部子网站进行爬取保存,成功爬取后进行下一步操作。爬取网址
执行中的问题
- 问题(一):
正则表达式查找过程中因未知错误每一页第一个武器的子网页链接爬取错误,爬取了多余无用信息, - 问题(二):
代码爬取完毕后首要任务是将爬取到的全部网址保存在excle文档里面,这次遇到的问题是因为控制获取下一页数据的程序在整个获取程序外,为一个for循环语句,在循环过程中,内部代码无法对excle进行保存,因为每一次循环进行的保存都会覆盖到原本定位的excle文件中的固定位置,除非定义一个变量改变excle文件名,使之不再保存在上一次记录的文档里,此策略不可取,因为及将爬取的网站网址过多,页数过多,对此进行分文档储存会导致极大的占用储存空间,并且提取文件中的内容非常繁琐。
- 问题(一):
解决问题的策略
- 策略(一):
因问题一不会影响正常的数据获取,,因为代码近乎相同,处理效率高,解决问题所花费的时间远小于查找匹配错误的原因,编写较为简单,且仅需要储存两个excle文件,因此,采的解决策略是将每一页第一个网址进行单独爬取,爬取其他网址时将第一子网页链接排除,最后组合两份爬虫爬出的数据得到全部链接。 - 策略(一/2): 代码编写到后期出现很多问题,比如对代码进行读写时,需要频繁修改程序路径来调用两个不同的网址提取代码,一经报错修改后常常伴随着矛盾错误,因此需要对代码进行优化,我修改了正则表达式来提取整个网址,此次修改代码是因为在优化提取单个网址上武器内容的代码时收到的启发,一次性对全部正则都进行了优化,并且找到了我认为更加高效的正则表达式使用方法。
- 策略(二):
问题二中问题已概述这里不再进行说明,因为在主程序内部进行excle保存会导致重复覆盖数据,因此,将主运行函数增加一个返回值,并且将数据以list的方式输出,在循环内,主程序外进行list相加,使之保存在一个变量里,保存之后再统一进行excle保存。
- 策略(一):
爬取单个武器信息与整合
执行中的问题
- 问题(一):
爬取到的信息应该以什么类型的数据结构进行存储,以及整个代码如何进行构建。 - 问题(二):
武器网址信息中存在两个相同的标签,如何整理爬取。 - 问题(三):
如何整合并且存入excel文件中
- 问题(一):
解决问题的策略
- 策略(一):
因为要把爬取的信息整合到excel表中,所以在编写代码之初考虑到储存问题,就将数据结构先行内定为列表了,字典虽然能够清晰的表示爬取网页中武器的各个属性,但是这不是我所需要的,字典比起列表更加复杂,因此我为了方便存入excel,优先选择了列表。既然确定了使用列表,那么如何将爬取到的属性存入列表又是需要考虑的问题,在这里我采取的方法是使用.append对列表进行储存,因为每一个武器网址的属性都不尽相同,所以,即是该武器没有次属性,正则匹配不到次属性,单它依然会在这个位置插入一个空值,也就是说,每一个属性都有他该存在的位置,这个位置不会因为爬取到的属性个数不同而改变。 - 策略(二):
最一开始采用的策略是用这两个相同标签将这两个属性都爬取下来,再对列表进行处理,第一开始的处理是对列表取第一个元素和第二个元素,比如anchor.append(a[1]),但是这种取法在获取到的属性为空时程序会报错,因此不可取,第二种方法也是目前我采用的方法为对列表进行切片处理,即将a[1]改成a[:-1],后来经过比对这两个相同标签的元素,发现存在隐藏标签,也就是说可以通过匹配隐藏标签来区分这两个元素。 - 策略(三):对爬取网址的程序调用,使用from import来取出函数内的全部网址,并用for循环来遍历全部网址,再用另外一个for循环来将列表中全部元素依次存入Excel中,至此整个爬取武器类各种属性的代码全部完成。
- 策略(一):