js 爬虫抓取网页数据(如何用ExcelVBA构建数据查询界面(二)的基本步骤)
优采云 发布时间: 2021-09-11 05:12js 爬虫抓取网页数据(如何用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 爬虫爬取整个表单的数据。简单的说就是爬取需要登录操作获取数据的网页,比如微博、博客等。