
最开始选择爬小米这个网页时是因为觉得界面好看,想爬点素材做备用,这次有个重点,又是因为偷懒,看见那满屏的源代码就自己欺骗安慰自己肯定一样的,然后只看检查后面整齐的源代码了,我大概是能理解毛爷爷那句:抛弃幻想,准备战斗了,差点做吐,还是我的宝贝大佬仔仔细细逻辑非常清晰的全部检查排除了一遍发现源代码与元素部分不一样!!划重点,除此之外,如果发现xpath取不到值,一律给我看页面源代码,跟element对比,是否属性有更改或者动态渲染,至于反爬之类的,不过一般官网都会有反爬,我们学习只需要少量素材就ok了。Scrapy爬取这种类似静态页面的很简单,重点在爬虫页面的数据解析,以及setting.py和pipelines管道配置写入数据库。接下来开始我的表演。
略


找到Scrapy文件目录中的settings文件,根据以下提示一步步配置。
具体网站具体分析,这里我访问的网站是小米商城官网
导入要用到的包。
设置文件唯一名字和请求网址。
在返回的页面解析数据。
这里有一个重点,Python是一个强格式的语言,如果你在打印数据时发现跟预料的不一样,不妨找找看,是不是忘记缩进或者多缩进了。由于爬取的网站不同,xpath中的字符串是不一样的,这里简单介绍一下xpath的用法,//表示跳级查找,@符号一般原来查找属性,text()表示标签内的内容。给大家讲解一下这个爬取逻辑。首先:item是items文件中XmimgItem类的实例对象。我们可以用它接收一些值。当我们爬取数据时会发现很多多余的标签,extract()是对那些标签进行剔除。只保留目标数据。其次:观察小米官网源代码我们可以发现几乎所有数据都包含在class值为first中的li标签中。把所有的在class值为first中的li标签取出来,遍历,循环获取。最后:由于部分数据数量不一样,这里再以其中某个数据集为索引遍历数组。一行行提交放在pipeline中处理写入数据库中。
def parse(self, response):
item\=XmimgItem()
div\_list \= response.xpath('//div\[@class="container"\]/div//li\[@class="first"\]')
for item1 in div\_list:
# 遍历获取值
img\_urls = item1.xpath('//div\[@class="figure figure-thumb"\]/img/@data-src').extract()
title\_list \= item1.xpath('//div\[@class="title"\]/text()').extract()
price\_list \= item1.xpath('//p\[@class="price"\]/text()').extract()
#print(img\_urls)打印,用来测试数据
#print(title\_list)
#print(price\_list)
for index in range(0, len(title\_list) - 2):
price\_list\[index\] \= re.sub('\[\\u4e00-\\u9fa5\]', '', price\_list\[index\])# 去除数据中的中文
# print(price\_list\[index\])
titles=title\_list\[index\]
price\=price\_list\[index\]
imgs\=img\_urls\[index\]
item\["title"\] = titles
item\["price"\] = price
item\["imgurl"\] = imgs
yield item鄙人才疏学浅,还请多多指教。