继续上一篇文章的内容,上一篇文章中已经将url管理器和下载器写好了.接下来就是url解析器,总的来说这个模块是几个模块中比较难的.因为通过下载器下载完页面之后,我们虽然得到了页面,但是这并不是我们想要的结果.而且由于页面的代码很多,我们很难去里面找到自己想要的数据.所幸,我们下载的是html页面,它是一种由多个多层次的节点组成的树型结构的文本文件.所以,相较于txt文件,我们更加容易定位到我们要找的数据块.现在我们要做的就是去原页面去分析一下,我们想要的数据到底在哪. 打开百度百科pyton词条…
最近刚接触python,找点小任务来练练手,希望自己在实践中不断的锻炼自己解决问题的能力.这个小爬虫来自慕课网的一门课程,我在这里记录的是自己学习的过程中遇到的问题和解决方法以及爬虫之外的思考. 这次的小任务就是写一个小爬虫.为啥选这个来练手呢,最最重要的原因就是大数据太热了,就像武汉的现在的天气.数据之于"大数据",就好比武器之于战士,砖瓦之于高楼.没有了数据,"大数据"就是空中阁楼,根本没法落地,应用于实际.数据怎么来呢?两种途径,一个是自取,一个他取.自取不必…
继续上一篇文章的内容,上一篇文章中,将爬虫调度器已经写好了,调度器是整个爬虫程序的"大脑",也可以称之为指挥中心.而现在,我们要做的就是去将调度器中用到的其他组件写好.首先是url管理器,它既然作为管理器,那么它一定要区分待爬取的url和已经爬取的url,否则会重复爬取.这里教程用的是set集合,将两个url暂时存放到集合中,也就是内存中,毕竟比较爬取的数据比较少,当然也可以存放到别的地方,比如缓存或者关系型数据库中. 从图中可以看出,一共出现5次: 第一次是调度器初始化函数中,创建这…
之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.com/ 打开网页,按下F12键,如下图所示: 点击下方标签中的Network,如下: 之后再点击下图所示位置: 找到红色下划线位置所示的标签并点击,在右边的显示内容中可以查看到所需要的headers信息. 一般只需要添加User-Agent这一信息就足够了,headers同样也是字典类型: user…
多线程爬虫 先回顾前面学过的一些知识 1.一个cpu一次只能执行一个任务,多个cpu同时可以执行多个任务2.一个cpu一次只能执行一个进程,其它进程处于非运行状态3.进程里包含的执行单元叫线程,一个进程可以包含多个线程4.一个进程的内存空间是共享的,每个进程里的线程都可以使用这个共享空间5.一个线程在使用这个共享空间的时候,其它的线程必须等待(阻塞状态)6.互斥锁作用就是防止多个线程同时使用这块内存空间,先使用的线程会将空间上锁,其它的线程处于等待状态.等锁开了才能进7.进程:表示程序的一次执行…
本篇主要讲述验证码的验证流程,包括如何验证码的实现.如何获取验证码.识别验证码(这篇是人来识别,机器识别放在下篇).发送验证码.同样以一个例子来说明.目标网址 http://icp.alexa.cn/index.php(查询域名备案信息) 1.验证码的实现: 简单的说,验证码就是一张图片,图片上有字符串.网站是如何实现的呢?有WEB基础的人可能会知道,每个浏览器基本都有cookie,作为这次回话的唯一标示.每次访问网站,浏览器都会把这个cookie发送给服务器.验证码就是和这个cookie绑定到…
本章叫介绍如何使用selenium在浏览器中使用js脚本,更多内容请参考:Python学习指南 隐藏百度图片 #-*- coding:utf-8 -*- #本篇将模拟执行javascript语句 from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() driver.get('https://www.baidu.com/') #给搜索输入框标…
大部分网站对网络爬虫都有限制,限制方式有两种: 一.Robots协议:二.网站通过判断对网站访问http的头部信息来查看是否是爬虫,并对爬虫做相关拦截 第一种限制是书面限制,第二种是强制性阻拦限制.那我们如何去突破第二种限制呢? 首先我们要爬取一个网站大部分会使用requests库的get()方法,而get()方法返回的response对象中包含了我们对网站的请求信息.例如: import requests url = 'https://www.cnblogs.com/huwt/' res =…
requests文档 首先需要安装:pip install requests get请求 最基本的get: # -*- coding: utf-8 -*-import requests response = requests.get("http://www.baidu.com/") 添加headers及查询参数: # -*- coding: utf-8 -*- import requests kw = {'wd':'秦时明月'} headers = {"User-Agent&…
这次只演示了,如何在真实项目内用到BeautifulSoup库来解析网页,而新浪的新闻是ajax加载过来的数据,在这里我们只演示解析部分数据(具体反扒机制没做分析). 代码地址:https://gitee.com/dwyui/BeautifulSoup_xinlang.git. 关于的爬虫的博客已经越来越多,使用到的技术也越来越多,后期我还会持续写下去,大概从几个角度去写,多线程爬取(提高效率),如何更好的做到爬取数据(破解反扒). 用redis管理多线程和代理IP,后期也会做一段关于非关系型数…