js 爬虫抓取网页数据(如何用ExcelVBA构建数据查询界面(二)的基本步骤)

优采云 发布时间: 2021-09-11 05:12

  js 爬虫抓取网页数据(如何用ExcelVBA构建数据查询界面(二)的基本步骤)

  作为python爬虫的第一篇,先说说python的使用背景,以及如何使用python爬虫爬取简单的静态网页和动态网页。本文的前提是大家已经熟悉了python的基本语法和ide默认的构建。至少你可以使用helloword。

  print("Hello World!")

  在上一篇文章中,我们讲了使用excel VBA制作数据查询界面,进行数据统计计算。有兴趣的同学可以点击下方链接自行查看。

  如何使用Excel VBA搭建数据查询界面(一)

  如何使用Excel VBA搭建数据查询界面(二)

  但是excel本身也有它的局限性。首先,在数据存储方面,excel 2013最多可以存储16,384列和1,048,576行数据。这个数据量对于数据挖掘或机器学习来说太小了。因此,有必要使用爬虫从互联网上抓取数据并存储到数据库中,以方便更深入的数据分析和挖掘。

  作者使用python3.5进行爬虫学习。简单说一下python的情况。第一,简洁,几行代码就可以实现很多其他语言可以实现的东西;其次,执行效率比C和C++慢很多,不利于高效率的要求。数据分析;现在spark上也有相应的界面,大家可以相应了解一下。当然,如果你真的想摆脱这个问题,还是建议学习scala,它和java类似,应用范围更广。 Python可以帮助你更快的熟悉各种算法,学习成本不高。

  接下来简单说一下python爬虫的基本原理。

  首先,爬虫其实可以看成是机器人。它抓取数据。其实更多的是模拟人的操作。它仅适用于网页。我们看到的是html在CSS样式的帮助下出现的样子,但是爬虫面对的是带有各种标签的html。

  接下来说说编写爬虫的基本步骤:首先观察我们的目标网站,了解需要的数据,在html标签的位置;其次,想想html标签只有在动态网页下才有,静态爬取还是可以的;粗略的方法是检查网页的源文件是否收录标签的数据。一般来说,动态网页比较多。

  最后说两个例子,简单说一下静态网页和动态网页的抓取。

  一、静态网页抓取

  首先,因为要爬取的数据在静态网页的源码上,所以可以简单的利用python的urllib的请求和bs4库的BeautifulSoup爬取如下。废话不多说,给你看代码。

  # import the library you want

from urllib.request import urlopen

from bs4 import BeautifulSoup

import re

# analyse the html

html = urlopen("http://www.pythonscraping.com/pages/page3.html")

bs0bj = BeautifulSoup(html, "html.parser")

# find the rules of the data you want

images = bs0bj.findAll("img",{"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})

# print all you want

for image in images:

print(image["src"])

  (可以看笔记)

  我抓取的是一个非常简单的静态网站/pages/page3.html。查看网站元素时,可以使用浏览器自带的小工具,比如firefox查看元素。

  

  首先通过请求抓取html页面所有元素的数据,然后根据标签的规则过滤掉对应的值,标签中收录的文本,或者属性,比如这个例子。最后写入数据库,或者打印出来。

  二、动态网页抓取

  对于动态网页,这里有一个简单的原则。大部分动态部分都会放在html中的js代码中。这个时候就需要用到它了,它是一个内置的浏览器webdriver。所谓内置浏览器,你可以简单的理解为一个隐形浏览器。当然也有带firefox插件的浏览器,不过上面提到的内置浏览器会比较常用。

  这个例子是关于抓取两个 URL 的数据并将它们写入一个 csv 文件。

  import urllib

from bs4 import BeautifulSoup

from selenium import webdriver

import time

import csv

csvFile = open("F:/workspace/haha.csv",'w+')

writer = csv.writer(csvFile)

# Animation

writer.writerow(('bilibili',' ',' ',' ',' ',' '))

writer.writerow(('paimin','minchen','bofangshu','danmushu','zonghezhishu'))

driverThree = webdriver.PhantomJS()

driverThree.get("http://www.bilibili.com/ranking#!/bangumi/0/0/7/")

time.sleep(5)

pageSourceThree = driverThree.page_source

bs0bjThree = BeautifulSoup(pageSourceThree,"html.parser")

j = bs0bjThree.findAll("div",{"class":"title"})

k = bs0bjThree.findAll("div",{"class":"pts"})

l = bs0bjThree.findAll("span",{"class":"data-box play"})

m = bs0bjThree.findAll("span",{"class":"data-box dm"})

for b in range(10):

titleThree = j[b].get_text()

IndexThre = k[b].get_text()

num = len(IndexThre)

IndexThree = IndexThre[0:num-4]

bofangliang = l[b].get_text()

danmuliang = m[b].get_text()

writer.writerow((b+1,titleThree,bofangliang,danmuliang,IndexThree))

driverThree.close()

# Comic

writer.writerow(('tecentac',' ',' ',' '))

writer.writerow(('paimin','minchen','piaoshu'))

driverFour = webdriver.PhantomJS()

driverFour.get("http://ac.qq.com/Rank/")

time.sleep(5)

pageSourceFour = driverFour.page_source

bs0bjFour = BeautifulSoup(pageSourceFour,"html.parser")

n = bs0bjFour.findAll("a",{"class":"mod-rank-name ui-left"})

o = bs0bjFour.findAll("span",{"class":"mod-rank-num ui-right"})

for c in range(10):

titleFour = n[c].get_text()

piaoshu = o[c].get_text()

writer.writerow((c+1,titleFour,piaoshu))

driverFour.close()

  第一步就是通过上面提到的内置浏览器解析出页面的js代码,然后抓取它的动态部分

  第二步和之前一样。理解了标签的规律后,它会循环获取,然后写入数据库。

  先打开路径对应的csv文件,路径需要自己设置,然后爬取数据,最后写入csv文件。打开csv文件,可以看到数据。当然,以后也可以读取csv文件,但是写入数据库的方法后面会讲到。这个应用场景会更多。

  运行结果如下:

  

  好了,今天就到这里。静态爬虫和动态爬虫取决于是否使用内置浏览器来解析页面的js代码,其余原理相同。

  最后公布下一次要讨论的内容。 python 爬虫爬取整个表单的数据。简单的说就是爬取需要登录操作获取数据的网页,比如微博、博客等。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线