python簡單應用!用爬蟲來採集天貓全部優惠券信息,寫入本地文件

今天給你們分享一個小網站的數據採集,並寫到excel裏面!php

python簡單應用!用爬蟲來採集天貓全部優惠券信息,寫入本地文件

分析網站

目標網站是「小咪購」,這裏有天貓全部的含有購物券的商品信息,咱們今天就來抓它吧!html

python簡單應用!用爬蟲來採集天貓全部優惠券信息,寫入本地文件

隨便找一段文字,而後點擊右鍵查看網頁源代碼,看看是否存在該文字,若是存在,那麼這個網頁就是靜態網站了!很幸運,這個網站竟然是靜態的。python

python簡單應用!用爬蟲來採集天貓全部優惠券信息,寫入本地文件

那就簡單了,不須要去分析ajax加載數據或者找json包了,直接獲取網頁源代碼==>>匹配相關內容==>>保存數據便可!ajax

python簡單應用!用爬蟲來採集天貓全部優惠券信息,寫入本地文件

工具和庫

Windows+python3.6json

import random多線程

import timeapp

import requestsdom

from lxml import etree函數

import xlwt工具

用這幾個庫就能夠搞定了!注意xlwt和xlrd這2個庫都是操做excel的,一個是保存數據,一個是讀取數據,不要搞混了。

python簡單應用!用爬蟲來採集天貓全部優惠券信息,寫入本地文件

開始寫代碼

首先寫一個函數,將全部的爬蟲工做寫到函數裏,以下圖

python簡單應用!用爬蟲來採集天貓全部優惠券信息,寫入本地文件

這個網站須要寫上headers,不寫是抓不到數據的!新建一個列表,將爬到的相關數據寫入列表,它的形式大概是這樣的:【【產品信息A1,2,3……】,【產品信息B1,2,3……】……】,這麼寫列表是由於咱們最後要將他們寫如excel表格,那麼列表中的每個元素(仍是列表形式)都是一行數據,方便寫入!

注意第33行,列表構成的時候,用+鏈接會將全部列表中的元素放入一個列表,好比:【1,2,3】+【4,5】=【1,2,3,4,5】,而用append()函數則會將後面的內容做爲一個元素加入列表中,好比:[1,2,3].append([4,5])=[1,2,3,[4,5]]

下來就是寫入excel了,首先是新建excel表格,並寫入第一行數據

wb = xlwt.Workbook(encoding='utf-8')
	ws = wb.add_sheet('優惠券')
	path = 'E://python//優惠券.xls'
	head = ['序號','商品類型','商品名稱','優惠券','券後價','在售價','銷量','推薦理由','商品連接']
	for i in range(9):
		ws.write(0,i,head[i])

後面的數據,依次按格式寫入並最後用wb.save(路徑)的方式保存便可!完整代碼及效果以下

import random
import time
import requests
from lxml import etree
import xlwt

def main(line = 1):
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}
	url = 'http://www.hlxns.com'
	html = requests.get(url, headers=headers)
	html.encoding = 'utf-8'
	page = etree.HTML(html.text).xpath('//a[@class="item"]/text()')[-1]
	for i in range(int(line/100)+1, int(page) + 1):
		k = 1
		lis = []
		print('【開始下載】第%d頁數據'%i)
		htm = requests.get(url + '/index.php?r=l&page={}'.format(str(i)), headers=headers)
		htm.encoding = 'utf-8'
		data = etree.HTML(htm.text)
		url_sps = data.xpath('//div[@class="title"]/a/@href')
		for url_sp in url_sps:#一頁100條
			time.sleep(random.random()*2)
			print('      【正在下載】第%03d頁第%03d條商品數據'%(i,k),end='')
			k += 1
			html_sp = requests.get(url + url_sp, headers=headers)
			html_sp.encoding = 'utf-8'
			info = etree.HTML(html_sp.text)
			title = info.xpath('//span[@class="title"]/text()')  # 產品
			summary = [x.replace('推薦理由:','') for x in  info.xpath('//span[@class="theme-color-3"]/text()')]  # 推薦理由
			category = info.xpath('//div[@class="nav-wrap"]/div/a[3]/text()')  # 類別
			now_price = info.xpath('//span[@class="now-price"]/b[2]/i/text()')  # 券後價
			old_price = info.xpath('//span[@class="org-price"]/i/text()')  # 在售價
			nums = info.xpath('//div[@class="text-wrap"]/span[2]/i/text()')  # 銷量
			coupon = info.xpath('//div[@class="buy-coupon theme-color-8"]/span/b/text()')  # 優惠券
			sp_url = info.xpath('//a[@class="theme-bg-color-8"]/@href')  # 連接
			lis.append(category+title+coupon+now_price+old_price+nums+summary+sp_url)
			print('................................【下載完成】')
		print('######第%d頁數據   【下載完成】'%i)
		for ii in range(len(lis)):
			lis[ii].insert(0, line)  # 添加序號
			for j in range(9):  # 列
				ws.write(line, j, lis[ii][j])
			line += 1
		print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>【寫入本頁數據完成】<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<')
		wb.save(path)
if __name__ == '__main__':
	wb = xlwt.Workbook(encoding='utf-8')
	ws = wb.add_sheet('優惠券')
	path = 'E://python//優惠券.xls'
	head = ['序號','商品類型','商品名稱','優惠券','券後價','在售價','銷量','推薦理由','商品連接']
	for i in range(9):
		ws.write(0,i,head[i])
	main()

python簡單應用!用爬蟲來採集天貓全部優惠券信息,寫入本地文件

因爲網站更新的很快(官方說是10分鐘。。。),因此也沒有抓取那麼多,全部的頁面有大約600多頁,一頁100條信息,也就是說一共有6萬多條商品信息,若是不用多線程的話會很慢!

python簡單應用!用爬蟲來採集天貓全部優惠券信息,寫入本地文件

相關文章
相關標籤/搜索