网络爬虫

网络爬虫引发的问题及robots协议

断了今生、忘了曾经 提交于 2019-12-04 15:38:56
一.网络爬虫的尺寸 1.以爬取网页,玩转网页为目的进行小规模,数据量小对爬取速度不敏感的可以使用request库实现功能(占90%) 2.以爬取网站或爬取系列网站为目的,比如说获取一个或多个旅游网站的爬虫,对数据要求规模较大,爬取速度敏感的可以使用Scrapy库 3.以爬取全网为目的,规模很大搜索引擎爬取速度关键,需要定制开发 二.网络爬虫带来的问题 总的来说有:骚扰问题,法律风险,隐私泄露 1.爬虫可利用计算机的快速功能访问服务器,它会比人类的速度快到百倍甚至千倍,受限于编写水平和目的,网络爬虫将会为web服务器带来巨大的资源开销。对网站运行者来讲,爬虫形成了骚扰。 2.网络爬虫会带来法律风险。服务器上的数据有产权归属,比如新浪上的新闻规新浪所有,如果网络爬虫获取数据牟利后将会带来法律风险。 3.网络爬虫会造成隐私泄露。网络爬虫可能具备突破简单访问控制的能力,或得被保护数据从而泄露个人隐私。 三.网络爬虫的限制 来源审查:判断User-Agent进行限制 检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问。 发布公告: Robots协议 告知所有爬虫网站的爬取策略,要求爬虫遵守。 四.Robots协议 作用:网站会告知网络爬虫哪些页面可以抓取,哪些不行 形式:在网站根目录下的robots.txt文件。 下面我自己做了一个实例 打开京东的Robots协议

避免网络爬虫IP被封的策略

ε祈祈猫儿з 提交于 2019-12-04 04:36:58
背景 这两天一直在搞Java网络爬虫作为Java课程设计,目标是爬取豆瓣电影top250的影评,之后可能还需要进行情感分析,当然这就不是爬虫的内容了。我的爬虫程序在一开始只是一个页面一个页面的爬取信息,一直没出现什么太大问题,直到昨晚进行整体测试时,出现了IP被封的问题。大概仅仅爬取了数万条评论,再次进行测试后就出现了进程异常报错。上网搜索发现可能是IP被封了,这时候再进入豆瓣网站提示我需要登录才能访问,这说明确实是被封了。 今天也再次出现这个问题,被封了三个IP,幸好实验室的IP多,但也不能任由我挥霍,经过今天一天与豆瓣的斗智斗勇,这里给出一些避免IP被封的策略。 主要参考自 https://www.cnblogs.com/mooba/p/6484340.html user_agent 伪装和轮换 不同浏览器的不同版本都有不同的user_agent,是浏览器类型的详细信息,也是浏览器提交Http请求的重要头部信息。我们可以在每次请求的时候提供不同的user_agent,绕过网站检测客户端的反爬虫机制。比如说,可以把很多的user_agent放在一个列表中,每次随机选一个用于提交访问请求。 这里给出一些user_agent Opera Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)

Python——初识网络爬虫(网页爬取)

拈花ヽ惹草 提交于 2019-12-04 04:18:05
  网络爬虫(又称为网页蜘蛛,网络机器人,在F OAF 社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。爬虫实在是计算机从业者的福音,它大大的缩减了我们的工作量。今天,我们就来尝试一下网页的爬取。   首先,我们需要安装两个基本的库, requests 和 beautifulsoup4 。    requests:requests是Python中一个第三方库,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。    beautifulsoup4:Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。    我们安装这两个库的最简单的方法当然是通过pip指令。首先打开控制台,输入cmd,然后输入指令: pip install requests/beautifulsoup4 即可自动安装。(关于pip的基本用法请见上一篇博客: https://www.cnblogs.com

网络爬虫基础

心不动则不痛 提交于 2019-12-03 21:13:22
网络爬虫 网络爬虫 (Computer Robot)(又被称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取 万维网 信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者 蠕虫 。 产生背景 随着网络的迅速发展, 万维网 成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。 搜索引擎 (Search Engine),例如传统的 通用搜索引擎 AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如: (1) 不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。 (2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的 网络数据 资源之间的矛盾将进一步加深。 (3) 万维网 数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现, 通用搜索引擎 往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。 (4)通用搜索引擎大多提供基于 关键字 的检索,难以支持根据语义信息提出的查询。 网络爬虫 为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生

初识网络爬虫

假如想象 提交于 2019-12-03 14:05:30
  我们可以把互联网比作一张大网,而爬虫(网络爬虫)便是网上爬行的蜘蛛。把网的节点比作一个个网页,爬虫爬到这里就相当于访问了该页面,获取了其信息。可以把节点间的连线比作网页与网页间的链接关系,这样蜘蛛通过一个节点后,可以顺着节点连线继续爬行到达下一个节点,即通过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,网站的数据就可以被爬行下来。 一、爬虫概述 简单来说,爬虫就是获取网页并提取和保存信息的自动化程序。下面介绍爬虫的基本流程: 1.获取网页 爬虫首先要做的工作就是获取网页,就是获取网页的源代码。源代码李包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取到想要的信息了。 爬虫通过 请求和响应 来获取网页,向网站的服务器发送一个请求,返回的响应体便是网页源代码。所以,最关键的部分就是构造一个请求并发送给服务器,然后接受到响应并将其解析出来。 2.提取信息 获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数据。 由于网页的结构由一定的规则,所以可以根据一些网页节点属性、CSS选择器或XPath来提取网页信息的库。 提取信息是爬虫非常重要的部分,它可以使杂乱的数据变得条理清晰,以便我们后续处理和分析。 3.保存数据 提取信息后,我们一般会将提取到的数据保存到一些地方以便后续使用。这里保存形式多样,可以简单保存为TXT文本或JSON文本

网络爬虫练习之网络小说

僤鯓⒐⒋嵵緔 提交于 2019-12-03 02:39:46
1 import requests 2 import bs4 3 4 #获取网页代码 5 def gethtml(url): 6 try: 7 response = requests.get(url) 8 response.raise_for_status() 9 response.encoding = response.apparent_encoding 10 return response.text 11 except: 12 return "禁止爬取本网站" 13 14 #获取每一页中的文字 15 def chapters(url,name): 16 html = gethtml("http://www.bjkgjlu.com"+url) 17 soup = bs4.BeautifulSoup(html,'html.parser') 18 for i in soup.find_all("div",attrs={"class":"chapter_content"}): 19 with open(name+".txt","wb") as f: 20 f.write(i.text.split("&lt")[0].encode("utf-8")) 21 print(name+"爬取结束,并存入文件") 22 23 if __name__=="__main__": 24 url =

第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

若如初见. 提交于 2019-12-03 02:33:20
大三python 就有开设过 python 课程 , 而且在平时逛知乎时便 体会到了 python 的强大。这一次 在学习了 《 Python 网络爬虫与信息提取》 的 课程后, 我 逐渐将 “ 爬虫 ” 这一概念 通过基础的实操具化 , 让我对这门语言更加感兴趣了 。 课程循序渐进, 通过这几周的学习, 我 大概了解了 python 网络爬虫和信息提取的相关知识。嵩天老师主要 是从一下几点结合案例给我们讲解 : 1. Requests 库:自动爬取 HTML 页面以及网络请求提交 。2 .Robots.txt: 网络爬虫排除标准 。3.Beautiful Soup 库:解析 HTML 页面 。4.Re 库:正则表达式详解以及提取页面关键信息 。5.Projects: 实战项目 A/B 。6.Scrapy 库:网络爬虫原理介绍以及专业爬虫框架介绍 。 在第一周的课件 “ 网络爬虫之规则 ” 中,分别介绍了 requests 库,网络爬虫的弊端与解决方法,运用 requests 库的五个实例。网络爬虫很方便和高效的从 HTML 网页中提取信息,并且多线程,进程模块成熟稳定,提升整个系统和分析能力。但是,网络爬虫也存在一定的弊端,首先,受限于编写水平和目的,网络爬虫将会为 web 服务器带来巨大的资源开销;其次,网络爬虫的法律风险;最后,网络爬虫泄露隐私,但总体来说,利仍大于弊

第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

老子叫甜甜 提交于 2019-12-03 01:55:27
1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的《Python网络爬虫与信息提取》MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 4.提供图片或网站显示的学习进度,证明学习的过程。 5.写一篇不少于1000字的学习笔记,谈一下学习的体会和收获。 首先谈下这门课程都讲了些什么: 一、Requests库:自动爬取HTML页面与自动网络请求提交。 简述了如何安装Requests库,以及Requests库的7个主要方法:request、get、head、post、put、patch、delete的使用,Requests库的2个重要对象:Request、Response,Response对象包含爬虫返回的内容的了解及使用。 二、robots.txt:网络爬虫排除标准 对robots.txt网络爬虫规范进行了了解,最主要的是 Robots协议,它的作用是:网站告知网络爬虫哪些页面可以抓取,哪些不行。形式是在网站根目录下的robots.txt文件,以及Robots协议的使用。(PS:类人行为下,可以酌情不参考robots协议)制作网络爬虫需要了解的规范。 三、BeautifulSoup库:解析HTML页面 BeautifulSoup库的安装。 对BeautifulSoup进行了了解,是解析、遍历、维护“标签数”的功能库,对BeautifulSoup的5个基本元素

网络爬虫之scrapy框架设置代理

匿名 (未验证) 提交于 2019-12-03 00:39:02
ǰϷ os.environ()简介 os.environ()可以获取到当前进程的环境变量,注意,是当前进程。 如果我们在一个程序中设置了环境变量,另一个程序是无法获取设置的那个变量的。 环境变量是以一个字典的形式存在的,可以用字典的方法来取值或者设置值。 windows: os.environ[‘HOMEPATH‘]:当前用户主目录。 os.environ[‘TEMP‘]:临时目录路径。 os.environ[PATHEXT‘]:可执行文件。 os.environ[‘SYSTEMROOT‘]:系统主目录。 os.environ[‘LOGONSERVER‘]:机器名。 os.environ[‘PROMPT‘]:设置提示符。 linux: os.environ[‘USER‘]:当前使用用户。 os.environ[‘LC_COLLATE‘]:路径扩展的结果排序时的字母顺序。 os.environ[‘SHELL‘]:使用shell的类型。 os.environ[‘LAN‘]:使用的语言。 os.environ[‘SSH_AUTH_SOCK‘]:ssh的执行路径。 内置的方式 原理 scrapy框架内部已经实现了设置代理的方法,它的原理是从环境变量中取出设置的代理,然后再使用, 所以我们只需要在程序执行前将代理以键值对的方式设置到环境变量中即可。 代码 第一种方式: 直接添加键值对的方式

古诗文网站之网络爬虫

匿名 (未验证) 提交于 2019-12-03 00:27:02
1. 下面是古诗文网站的网络爬虫代码 # encoding:utf-8 import requests import re import json def parse_page(url): # 1.请求网站 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" } response = requests.get(url, headers=headers) text = response.text # 2.解析网站 titles = re.findall(r'<div\sclass="cont">.*?<b>(.*?)</b>', text, re.DOTALL) # print json.dumps(titles, encoding="utf-8", ensure_ascii=False) times = re.findall(r'<p\sclass="source">.*?<a\s.*?>(.*?)</a>', text, re.DOTALL) # print json.dumps(times, encoding="utf-8", ensure