数据采集

网络爬虫,之所以称之为爬虫,是因为它们可以沿着网络爬行,它们的本质就是一种递归方式。为了找到URL连接,它们必须首先获得网页内容,检查页面的内容。寻找另一个URL,获取这一个URL的内容,不断重复这一过程。

1.遍历单个域名

from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
#使用时间产生随机数
random.seed(datetime.datetime.now())
#定义getlinks函数,遍历页面生成link函数序列
def getLinks(articleUrl):
    html = urlopen("http://en.wikipedia.org"+articleUrl)
    bsObj = BeautifulSoup(html)
    return bsObj.find("div", {"id":"bodyContent"}).findAll("a",href=re.compile("^(/wiki/)((?!:).)*$"))
#主函数,传入参数/wiki/Kevin_Bacon,定义首页
links = getLinks("/wiki/Kevin_Bacon")
#使用随机数随机选择一个link进行爬行
while len(links) > 0:
    newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
    print(newArticle)
    links = getLinks(newArticle)

2.采集整个网站

输入图片说明

上面的程序主要分为三个部分: 1.定义pages为一个空集合

2.定义一个函数:

  • 声明全局变量pages
  • 提取网页html代码给变量html
  • 使用beautifulsoup格式化组织html
  • 遍历每个找到的给定格式的link
  • 判断link存在href属性
  • 判断href属性的值在不在pages集合中
  • 发现了新页面,把href的值传给newPage
  • 输出newPage
  • 把新的连接加入pages集合zhong
  • 调用函数遍历新页面

3.主函数,处理一个空页面,实际是维基百科的首页,然后调用getlink函数遍历网页上的每个连接。

注:上面程序是一个递归的程序,python默认递归层数是1000次,达到次数后停止。我们可以写一个非递归的程序,可以把所有新页面加入集合,每次都从集合中随机提取一个页面遍历,然后删除,再随机提取一个页面,当然,这样的话,页面过多时可能会造成集合过大,可以使用巧妙的方法解决问题。

3.通过互联网采集数据

可以说,你用你的电脑和一个python代码就可以建立一个谷歌--当然是1994年的谷歌。谷歌最有价值的资源就是存储在世界各地的超大规模的数据仓库。这是谷歌无数爬虫无数个日日夜夜的成果。然而现有网络世界仍有90%的网络资源是谷歌爬虫没有到达的,有兴趣的朋友可以了解一下深网和暗网。

4.用scrapy进行数据采集

参见:http://my.oschina.net/clgo/blog/649088

转载于:https://my.oschina.net/clgo/blog/671268

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值