Python作为数据采集系统
优采云 发布时间: 2020-08-06 05:03我们可以使用以下规则稍微调整代码以获取输入链接:
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 26 15:44:26 2018
@author: szm
"""
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
random.seed(datetime.datetime.now())
def getLinks(articleUrl):
html = urlopen("https://baike.baidu.com"+articleUrl)
bsObj = BeautifulSoup(html, "html.parser")
return bsObj.find("div", {"class":"para"}).findAll("a", href=re.compile("^(/item/)((?!:).)*$"))
links = getLinks("/item/google")
while len(links) > 0:
newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
print(newArticle)
links = getLinks(newArticle)
/item/%E8%B0%A2%E5%B0%94%E7%9B%96%C2%B7%E5%B8%83%E6%9E%97
/item/%E6%8B%89%E9%87%8C%C2%B7%E4%BD%A9%E5%A5%87
/item/%E6%96%AF%E5%9D%A6%E7%A6%8F
/item/%E6%97%A7%E9%87%91%E5%B1%B1/29211
/item/%E8%81%94%E5%90%88%E5%9B%BD/135426
/item/%E6%B3%95%E8%AF%AD
/item/%E7%BD%97%E6%9B%BC%E8%AF%AD%E6%97%8F
/item/%E6%84%8F%E5%A4%A7%E5%88%A9%E8%AF%AD
采集整个网站
您可能听说过深网,暗网或隐藏网.
术语,尤其是在最近的媒体中. 是什么意思?
深层纤维网是纤维网的一部分,与表面纤维网相反. 前旺是互联网上可以被捕获的搜索引擎
您到达的网络部分. 据不完全统计,大约90%的Internet实际上是深层网络. 因为Google没有
可以执行表单提交之类的操作,但是找不到未直接链接到顶级域名的网页,或者是因为
由于robots.txt禁止您查看网站,因此与深层网页相比,浅层网页的数量相对较少.
暗网,也称为暗网或暗网,完全是另一个“怪物”. 它们还基于现有的
基于网络,但使用Tor客户端,并在HTTP之上运行新协议,它提供了一个
用于信息交换的安全隧道. 就像采集其他网站一样,也可以采集这样的深色网页,
这些内容超出了本书的范围.
与暗网不同,深网相对容易采集. 实际上,本书中的许多工具都可以教您如何采集
Google爬虫机器人无法获取的那些深层网络信息.
那么,什么时候采集整个网站有用,什么时候有害?时间
从整个网站采集数据有很多好处.
一种常见且耗时的网站采集方法是从首页(例如首页)开始,然后在页面上进行搜索
有些链接可以构成一个列表. 然后去采集这些链接的每一页,然后转换在每一页上找到的链接形状
创建一个新列表并重复下一轮采集.
显然,这是一种复杂性迅速增长的情况. 如果每个页面有10个链接,则网站上有5个页面
面部深度(中型网站的主流深度),那么,如果要采集整个网站,则必须采集总计的蚊帐
页数为105,即100 000页. 但是,尽管“ 5页深度,每页10个链接”是一个净
该网站的主流配置,但实际上,很少有网站实际拥有100,000个或更多的页面. 这是因为其中很大一部分
重复内链.
为了防止页面被采集两次,链接重复数据删除非常重要. 代码运行时,所有发现的
所有链接都放在一起并存储在易于查询的列表中(以下示例涉及Python的设置类型). 仅
仅采集“新”链接,然后从页面中搜索其他链接:
为充分说明此网络数据采集示例的工作原理,我降低了“仅
寻找内部链接”标准. 不再限制搜寻器采集的页面范围,只要它遇到一个页面,它就会找到所有带有/ item / open的页面
链接的头,无论链接是否收录分号. (提示: 输入链接不收录分号,但收录文档上传页面
指向面部和讨论页等页面的URL链接包括分号. )
在一开始,使用getLinks处理一个空URL,它实际上是Wikipedia的主页,因为该函数中的空URL只是