Python - 网络爬虫(Web Scraping)

news/2024/7/19 12:36:17 标签: 爬虫

爬虫简介">网络爬虫简介

爬虫何时使用">网络爬虫何时使用

用于快速自动地获取网络信息,避免重复性的手工操作。

爬虫是否合法">网络爬虫是否合法

网络爬虫目前人处于早期的蛮荒阶段,尚未针对“允许那些行为”取得广泛共识,是否合法要根据当地的法律法规来具体区分。
从目前的实践来看:

  • 如果抓取数据的行为用于个人使用,这不存在问题;
  • 如果数据用于转载,那么原创数据(比如,意见和评论)通常会受到版权限制,而现实生活中的真实数据(比如,营业地址、电话清单)一般不受版权限制。

为了避免出现糟糕的情景,建议:

  • 尽可能地了解当地相关的法律法规,尊重版权
  • 下载请求的速度限制在一个合理值之内
  • 设定一个专属的用户代理标识自己

背景调研

爬取一个网站之前,首先需要对目标站点的规模和结构进行一定的了解。

检查robot.txt
大多数网站定义的robot.txt文件表明了爬取该网站时存在哪些限制。
这些限制虽然作为建议值给出,但仍建议遵守,否则很可能导致网站封禁抓取行为。
更多信息可参考:http://www.robotstxt.org/
示例:

https://www.bing.com/robots.txt
http://www.csdn.net/robots.txt
https://www.oschina.net/robots.txt

检查网站地图
网站提供的Sitemap文件(即网站地图)可以帮助爬虫定位网站最新的内容,而无须爬取每一个网页。
但该文件经常存在缺失、 过期或不完整的问题。
更多信息可参考:http://www.sitemaps.org/protocol.html
示例:

http://www.bing.com/images/sitemap.xml
http://www.csdn.net/article/sitemap.txt
http://www.oschina.net/sitemap.xml

估算网站大小
目标网站的大小会影响如何进行爬取的方式。
估算网站大小的一个简便方法是利用搜索引擎爬虫的结果,因为很有可能搜索引擎已经爬取过目标网站。
可以通过搜索引擎的site关键词过滤域名结果,从而获取该信息。但对于特殊限制或者更大型的网站,搜索引擎的估算并不十分准确。
常用搜索引擎命令

1.3.4 识别网站所用技术
builtwith模块:检查网站构建的技术类型
安装模块:pip install builtwith
示例:

>>> builtwith.parse( 'http://127.0.0.1:8000/places')
{u'javascript-frameworks': [u'jQuery', u'Modernizr', u'jQuery UI'], u'web-frameworks': [u'Web2py', u'Twitter Bootstrap'], u'programming-languages': [u'Python']}
>>>
>>> builtwith.parse( 'http://www.bing.com')
{u'javascript-frameworks': [u'RequireJS'], u'operating-systems': [u'Windows Server'], u'web-servers': [u'IIS']}
>>>

寻找网站所有者
使用WHOIS协议查询域名的注册者。
python-whois模块:Python针对WHOIS协议的封装库
安装模块:pip install python-whois -i https://mirrors.ustc.edu.cn/pypi/web/simple/
示例:

>>> print whois.whois('www.csdn.net')
{
  "updated_date": [
    "2014-11-26 00:00:00",
    "2015-01-28 23:17:54"
  ],
  "status": "clientTransferProhibited https://icann.org/epp#clientTransferProhibited",
  "name": "Beijing Chuangxin Lezhi Co.ltd",
  "dnssec": "Unsigned",
  "city": "Beijng",
  "expiration_date": [
    "2017-03-11 00:00:00",
    "2017-03-11 05:00:00"
  ],
  "zipcode": "100016",
  "domain_name": "CSDN.NET",
  "country": "CN",
  "whois_server": "whois.networksolutions.com",
  "state": "Beijing",
  "registrar": "NETWORK SOLUTIONS, LLC.",
  "referral_url": "http://networksolutions.com",
  "address": "B3-2-1 ZHaowei Industry Park",
  "name_servers": [
    "NS3.DNSV3.COM",
    "NS4.DNSV3.COM"
  ],
  "org": "Beijing Chuangxin Lezhi Co.ltd",
  "creation_date": [
    "1999-03-11 00:00:00",
    "1999-03-11 05:00:00"
  ],
  "emails": [
    "abuse@web.com",
    "Jiangtao@CSDN.NET"
  ]
}
>>>

参考信息

从零开始写Python爬虫:https://zhuanlan.zhihu.com/Ehco-python)

  • requests库的安装与使用
  • BS4库的安装与使用
  • 爬虫实践-获取百度贴吧内容
  • 爬虫实践-排行榜小说批量下载
  • 爬虫实践-电影排行榜和图片批量下载

转载于:https://www.cnblogs.com/anliven/p/9180851.html


http://www.niftyadmin.cn/n/709038.html

相关文章

【剑指 Offer 05. 替换空格】

【解题思路】 char字符可以通过char a, a 来判断是否是空格。 class Solution {public String replaceSpace(String s) {char[] cs s.toCharArray();for(int i 0; i < cs.length; i){if(cs[i] ){char[] c new char[cs.length2];for(int j 0; j < i; j){c[j] cs[…

都是前端工程师,为什么他的年薪过百万?|GMTC倒计时一周

“前端工程师”这个词在最近两年的互联网圈可谓炙手可热&#xff0c;前几年一直热闹非凡的前端技术栈、框架还有人才市场&#xff0c;直到 2017年才慢慢回归理性&#xff0c;沉淀下的人才质量比往年更高&#xff0c;整体的议价能力自然也在往上走。 外媒网站 Randstad US收集了…

【剑指 Offer 06. 从尾到头打印链表】(List<Integer>转int[])

【解题思路】 将链表的值放入list数组中&#xff0c;再将数组逆置。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val x; }* }*/ class Solution {public int[] reversePrint(ListNode hea…

【剑指 Offer 07. 重建二叉树】(先序+中序重建二叉树)

【解题思路】 先在先序序列中取出当前的根节点&#xff08;第一个节点&#xff09;&#xff0c;在中序序列的找到该节点的索引&#xff0c;该节点左边的是根节点的左子树&#xff0c;该节点右边的是根节点的右子树。分别找到左右子树的先序、中序序列&#xff0c;递归向下建立子…

Javascript 面向对象编程(三)

理解什么是继承 方法和属性从一个类传递到另一个类的过程 为什么需要继承机制 funtion Person(firstName, lastName) {this.firstName firstNamethis.lastName lastName}Person.prototype.sayHi function() {return "Hi" this.firstName " " this.la…

Google Zxing 二维码生成与解析

生成二维码的开源项目可谓是琳琅满目&#xff0c;SwetakeQRCode、BarCode4j、Zxing...... 前端有JQuery-qrcode,同样能实现生成二维码。 选择Zxing的原因可能是对 Google 公司的信赖和个人崇拜吧。 其实使用起来相当的简单&#xff0c;我这里使用的是最新3.2 Zxing.jar &#x…

【剑指 Offer 09. 用两个栈实现队列】(Stack)

【解题思路】 用两个栈&#xff0c;在删除队首元素时直接弹出&#xff1b;在队尾插入元素时&#xff0c;用另一个栈辅助&#xff0c;先把栈中其他元素移过去&#xff0c;把新元素插在栈底&#xff0c;最后把原来的元素恢复回去。 class CQueue {Stack<Integer> s1;Stack…

beego自动化部署

beego是Golang写的应用程序开源框架http://beego.me/&#xff0c;我使用beego写了一个项目小项目&#xff0c;golang是编译语言&#xff0c;需要编译之后再部署&#xff0c;每次部署到服务上是件很麻烦的事情。就写了一个自动打包部署到服务器的脚本&#xff0c;方便发布部署。…