如何使用Excel制作一个简单的爬虫?

2,603 阅读3分钟
原文链接: zhuanlan.zhihu.com

因为前些日子杀了一个程序员祭天, 导致程序员人手不足, 这不, 老衲让程序员们去校验当前数据的可靠性, 就被程序员一把怼回来:"时间紧任务急, 你要是不想影响排期, 就自己干吧~"

我去! 敢这么和产品经理说话!

老衲赶紧给程序员买个外卖盒饭压压惊.

当前面临的局面是, 手里有几万条记录. 主要是旅游线路的信息. 但是有一些已经无效或者下架了. 我们需要知道这些已经无法售卖的线路, 在总数中的比例.

方案1:

随便抽几百条, 然后每个链接点一下, 看一眼, 然后做个记录, 最后统一汇总一下就好啦.

嗯, 可行性很高. 先走这条路试试.

按下三星自杀式秒表. 双记一下单元格, 让url变成真正可点击的超链接. 点一下, 等5秒, 哦哦, 该线路目前正常, 在表格里面写个1表示正常(写0表示不正常), 看一下秒表, 总耗时25秒.

抽200条 = 5000秒. 加上休息的时间, 四舍五入就是7200秒. 很好, 两个小时而已.

老衲当然是否决啦! 两个小时就搞这么200条数据. 猪才会干.

方案2:

随便抽几百条, 然后让爬虫把基本信息爬回来, 然后用筛选或过滤, 一次性统计出badcase占比.

嗯, 爬虫怎么搞? 喂, 老贾, 你的爬虫系统借我用用~~ ( 老贾: 你有机器吗? 你有权限吗? 你会使用这个beautiful Soup框架吗? )

......沉思1分钟...................沉思3分钟.....................沉思10分钟......................睡30分钟...............

小样儿, 无非是欺负老衲硬盘空间小, 装不上开发环境嘛. 但老衲手里还有Excel呀.

这个玩意儿不就是个现成的爬虫么?

来一行试试:

果然可以, 那就开工吧! (顺道擦擦睡觉时的口水)

  1. 先把数据简单整理一下, 起码汇成表格. 表格就随便起个名字吧, 叫"TableLvmamaSet"

2. 打开"开发工具", 不会打开的请看老衲之前的相关Excel教程.

3. 插入一个模块

4. 写代码咯~~~~~不难 ,真的不骗你, 超简单的. 磕两只小龙虾就写好了.

Sub crawler()


Dim URL As String
Dim RowNum As Integer
Dim UrlList As Range
Dim DestiArea As Range

'先打开原始文件所在的文件, 获取源数据中的URL
Windows("驴妈妈商品抽样.xlsx").Activate
Range("TableLvmamaSet[url]").Select

'将获取到的URL列表暂存一下, 因为Excel很多操作会影响到"选择", 所以要暂存
Set UrlList = Selection

'再打开目标文件
Windows("工作簿1").Activate

'向目标文件写入
For Each Cell In UrlList
 
 '毎一条结果, 因为会有很多行, 所以只能每条结果独占一列
 URL = Cell.Text
 RowNum = Cell.Row
 Cells(1, RowNum).Value = URL
 
 Set DestiArea = Cells(2, RowNum)
 
    With ActiveSheet.QueryTables.Add(Connection:="URL;" & URL, Destination:=DestiArea)
        .Name = URL
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With

Next
End Sub

5. 跑起来, 喝杯咖啡, 20分钟后再看看~~

果然成功了. 每一列就是一个网页的内容. 的确有下架产品.

6. 然后使用一下查找工具

7. 于是:

大功告成. 代码留着, 下顿还可以继续用. 老衲要继续吃小龙虾去啦.

我们下期再见.