我依靠记忆外带连蒙带猜buff,一顿操作猛如虎,总算从某duang网上爬取出近200条计算机类畅销书籍。爬完我才发现原来也不是那么难,并且爬虫还和ETL十分相似,都是抽取、转换、加载三步走。本文所涉及的环境:谷歌浏览器、python3。1 抽取(extract)
爬虫通常有一个数据来源,这里我的数据来源就是某duang网,目标就是从浏览器里将需要的数据抽取出来。先找到计算机图书畅销榜页面,然后对目标页面URL发起请求,抽取需要的数据。
通常都是GET请求,比较简单,直接发起即可:
import requests
def extract_program_book(url):
getstr = requests.get(url)
getstr.encoding = 'GBK'
return getstr.text
2 转换(transform)显然第一步抽取出来的数据多而杂,有许多内容都不是我们想要的数据,需要进行数据过滤或数据加工,这里我们更侧重数据过滤,提取关键数据即可。
在目标页面右键鼠标选择检查,也可以使用快捷键ctrl+shift+I,找到一个目标元素并提取元素选择器,等下靠它来进行数据转换。
from bs4 import BeautifulSoup
def transform_program_book(strdata):
soup = BeautifulSoup(strdata, "lxml")
data = soup.select("body > div.bang_wrapper > div.bang_content > div.bang_list_box > ul > li")
result = []
for item in data:
temp = []
for i in [0, 2, 4, 5]:
temp.append(item.find_all("div")[i].getText())
temp.append(item.find_all("div")[6].find_all("span")[0].getText())
result.append(temp)
return result
3 加载(load)数据转换完我们需要对数据进行加载,可以保存到文件,这里简单将数据保存到Excel,将排行榜序号、书籍名称、作者、出版社、价格输出保存。
保存excel对于python强大的工具库而言就是手到擒来,这里使用openpyxl,如果没有此组件,可以在cmd命令窗口中执行:pip install openpyxl 。
import openpyxl
def load_program_book_2_excel(filename, sheetname, data):
try:
workbook = openpyxl.load_workbook(filename)
except FileNotFoundError as err:
print("OS error: {0}".format(err))
workbook = openpyxl.Workbook()
sheet = workbook.active
begin = sheet.max_row
size = len(data)
for i in range(0, size, 1):
for j in range(0, len(data[i]), 1):
sheet.cell(row=begin + i, column=j + 1, value=str(data[i][j]))
workbook.save(filename)
总算是不辱使命完成了老板的要求,同时再一次体会到了python的易用且强大,看来真得转行学习python了。