网页抓取

python scrapy简介

被刻印的时光 ゝ 提交于 2019-12-08 21:30:44
scrapy基础 scrapy是用python写的一个库,使用它可以方便的抓取网页。 主页地址 http://scrapy.org/ 文档 http://doc.scrapy.org/en/latest/index.html 安装 sudo pip install scrapy 一个简单的教程 http://doc.scrapy.org/en/latest/intro/tutorial.html 如果你对这些概念有了解,使用上面的教程会比较容易. 它们是json, xpath, 正则表达式, 生成项目 scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码。 打开命令行,执行:scrapy startproject tutorial,生成的项目类似下面的结构 tutorial/ scrapy.cfg tutorial/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ... scrapy.cfg是项目的配置文件 用户自己写的spider要放在spiders目录下面,一个spider类似 from scrapy.spider import BaseSpider class DmozSpider(BaseSpider): name = " dmoz "

零基础写python爬虫之使用Scrapy框架编写爬虫

此生再无相见时 提交于 2019-12-08 21:02:01
网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据。虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间。Scrapy是一个使用 Python 编写的,轻量级的,简单轻巧,并且使用起来非常的方便。使用Scrapy可以很方便的完成网上数据的采集工作,它为我们完成了大量的工作,而不需要自己费大力气去开发。 首先先要回答一个问题。 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建项目 (Project):新建一个新的爬虫项目 明确目标(Items):明确你想要抓取的目标 制作爬虫(Spider):制作爬虫开始爬取网页 存储内容(Pipeline):设计管道存储爬取内容 好的,基本流程既然确定了,那接下来就一步一步的完成就可以了。 1.新建项目(Project) 在空目录下按住Shift键右击,选择“在此处打开命令窗口”,输入一下命令: 代码如下: scrapy startproject tutorial 其中,tutorial为项目名称。 可以看到将会创建一个tutorial文件夹,目录结构如下: 代码如下: tutorial/ scrapy.cfg tutorial/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ...

Python3爬虫(一)抓取网页的html

我的未来我决定 提交于 2019-12-06 17:19:24
因为代码只有几行,所以可以先贴代码: import urllib.request url = r'http://douban.com' res = urllib.request.urlopen(url) html = res.read().decode('utf-8') print(html) 第一行, 导入 urllib库的request模块 第二行, 指定要抓取的网页url,必须以http开头的 第三行, 调用 urlopen()从服务器获取网页响应(respone),其返回的响应是一个实例 第四行, 调用返回响应示例中的read()函数,即可以读取html,但需要进行解码,具体解码写什么,要在你要爬取的网址右键,查看源代码, 红框中的 charset= 则表示编码格式,我要爬取的网页编码为 utf-8,所以,解码我也填utf-8,如果是gbk2313,则填写的是GBK (更为简单的方法是在程序中调用info()获取网页头部来查看编码方式:) 查看网页的头部信息以确定网页的编码方式: import urllib.request res = urllib.request.urlopen('http://www.163.com') print(res.info()) #info()方法 用来获取网页头部 执行结果: 可以看出次网页的编码是 GBK。 第五行, 打印就行。

python3网页抓取与下载文件

淺唱寂寞╮ 提交于 2019-12-06 17:16:43
参考 https://blog.csdn.net/c406495762/article/details/58716886 1、下载整个网页 #!/usr/bin/python #get html page from selected url from urllib import request if __name__ == "__main__": response = request.urlopen("http://app.so.com") html = response.read() html = html.decode("utf-8") print(html) 2、根据url,下载文件 #!/usr/bin/python3 # e.g.http://app.so.com/ #download file from selected url import urllib.request url="http://shouji.360tpcdn.com/180822/aa171e9134dfa23c1d22a182ecf6d50c/com.ss.android.article.video_268.apk" downPath='..\\apks\s.apk'#include the source name,not only path,"\\"the first is the escape

震惊!编写“爬虫”,怎么“面向监狱编程”了?

狂风中的少年 提交于 2019-12-05 14:49:19
2019年9月以来,不少因为非法使用“爬虫”技术,而使公司面临诉讼,程序猿被警察带走的新闻震惊了IT圈的小伙伴们! 我只是个写爬虫的,跟我有什么关系? 许多程序员都有这样的想法,技术是无罪的,我只是个打工的程序员,公司干违法的业务,跟我没关系。。。只能说,程序猿们真是图样图森破了。 看到那么多爬虫导致公司触犯法律的新闻,有人开玩笑说,编写爬虫程序,就是“面向监狱编程”。 看个案例: 抓取用户社交数据,尤其是用户隐私相关。 (图片文字来自新浪网) 其实,“爬虫”只是一种技术,没有那么可怕如果使用技术来做非法的事情,自然就会有警察叔叔上门了。 今天老司机给大家讲一下爬虫的几个原理,以及怎么安全无忧地使用爬虫。 首先,网络爬虫(又称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 其次,网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型: • 通用网络爬虫(General Purpose Web Crawler) • 聚焦网络爬虫(Focused Web Crawler) • 增量式网络爬虫(Incremental Web Crawler) • 深层网络爬虫(Deep Web Crawler) 实际的网络爬虫系统通常是几种爬虫技术相结合实现的。由于商业原因,网络爬虫的技术细节很少公布出来。 所以,可以很安全地得出结论,普通编程爱好者

c# 关于抓取网页源码后中文显示乱码的原因分析和解决方法

不问归期 提交于 2019-12-05 13:07:44
原因分析:首先,目前大多数网站为了提升网页浏览传输速率都会对网站内容在传输前进行压缩,最常用的是GZIP压缩解压解压算法,也是支持最广的一种。 因为网站传输时采用的是GZIP压缩传输,如果我们接受webrespones接受数据未按照GZIP进行解压显示,那么就会造成乱码,如何知道网站是否是GZIP或者其他压缩方式传输的呢? 我这里用360浏览器做例子,如下图 可以看到,百度传输方式为gzip,deflate方式发给客户端数据 知道了原因我们下面来解决问题 2、通过GZIP解压 方法如下,此方法作用是输入url地址,返回一个解压后的string内容字符串。 //定一个解码gzip压缩格式网页的方法 private static string getGzip(string u) { StringBuilder sb = new StringBuilder(204800);//200K对于频繁拼接的字符串,用stringbuilder比string节约内存和提升性能 WebClient wc = new WebClient();//定义一个发送和接收web数据的公用方法类。 wc.Headers[HttpRequestHeader.AcceptEncoding]="gzip,deflate";//接收gzip类型的数据 wc.Headers[HttpRequestHeader

【文智背后的奥秘】系列篇——分布式爬虫之WebKit

旧城冷巷雨未停 提交于 2019-12-04 20:33:34
版权声明:本文由文智原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/139 来源:腾云阁 https://www.qcloud.com/community 引子: 文智平台是利用并行计算系统和分布式爬虫系统,并结合独特的语义分析技术,为满足用户NLP、转码、抽取、全网数据抓取等中文语义分析需求的一站式开放平台。其中分布式爬虫系统是获取海量数据的重要手段,给文智平台提供了有效的大数据支撑。 如果简化网络爬虫(Spider)架构,只留下一个模块,那么这个模块就是抓取器Crawler,它在整个Spider架构中就相当于一个嘴巴,这个嘴巴永远在web的海量数据世界中寻找食物。最简单的Crawler就是一个实现了HTTP协议的客户端,它接收一系列URL,向网站发起抓取请求,输出一系列网页Page,如图1所示。 图1:Crawler的工作过程 对于一些小的抓取任务,wget就是一个很不错的选择,例如学校里面搞搜索引擎研究,就经常使用wget或基于wget源码做修改来满足需求。对单次网页下载来说,通常大部分时间都消耗在等待对方网站响应上。如果下载的并发量小,机器和带宽资源就很难得到充分利用,抓取速度上不去。作为商业搜索引擎来说,我们每天抓取数百万甚至千万数量级的网页,那么使用wget性能就远远不能满足需求

通用爬虫和聚焦爬虫概念

删除回忆录丶 提交于 2019-12-04 15:05:01
根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。 通用搜索引擎(Search Engine)工作原理 通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。 第一步:抓取网页 搜索引擎网络爬虫的基本工作流程如下: 首先选取一部分的种子URL,将这些URL放入待抓取URL队列; 取出待抓取URL,解析DNS得到主机的IP,并将URL对应的网页下载下来,存储进已下载网页库中,并且将这些URL放进已抓取URL队列。 分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环.... 索引擎如何获取一个新网站的URL: 1. 新网站向搜索引擎主动提交网址:(如百度 http://zhanzhang.baidu.com/linksubmit/url ) 2. 在其他网站上设置新网站外链(尽可能处于搜索引擎爬虫爬取范围) 3. 搜索引擎和DNS解析服务商(如DNSPod等)合作,新网站域名将被迅速抓取。

使用wget工具抓取网页和图片

让人想犯罪 __ 提交于 2019-12-03 18:48:39
奇怪的需求 公司需要将服务器的网页缓存到路由器,用户在访问该网页时就直接取路由器上的缓存即可。虽然我不知道这个需求有什么意义,但还是尽力去实现吧。 wget概述 wget是unix和类unix下的一个网页抓取工具,待我熟悉它后,发现它的功能远不止这些。但是这篇博文只说 怎么抓取一个指定URL以及它下面的相关内容(包括html,js,css,图片)并将内容里的绝对路径换成相对路径 。网上搜到一堆有关wget的文章,关于它怎么抓取网页和相关的图片资源,反正我是没有找到一篇实用的,都以失败告终。 这是wget -h > ./help_wget.txt 后的文件内容 GNU Wget 1.16, a non-interactive network retriever. Usage: wget [OPTION]... [URL]... Mandatory arguments to long options are mandatory for short options too. Startup: -V, --version display the version of Wget and exit. -h, --help print this help. -b, --background go to background after startup. -e, --execute=COMMAND

httpwebrequest网页抓取数据乱码

匿名 (未验证) 提交于 2019-12-03 00:36:02
1、可能的原因是下载网页的编码和网页编码不一致 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Encoding cd = System.Text.Encoding.GetEncoding(response.CharacterSet); Stream resStream = response.GetResponseStream(); StreamReader sr = new StreamReader(resStream, cd); html = sr.ReadToEnd(); 2、可能的原因是下载的网页压缩过了 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Encoding cd = System.Text.Encoding.GetEncoding(response.CharacterSet); Stream resStream = response.GetResponseStream(); try { if (response.ContentEncoding.ToLower().Contains("gzip")) { resStream = new GZipStream(resStream,