使用python实现简单爬虫
简单的爬虫架构
调度器
URL管理器
管理待抓取的URL集合和已抓取的URL,防止重复抓取,防止死循环
功能列表
1:判断新添加URL是否在容器中
2:向管理器添加新URL
3:判断容器是否为空
4:将已爬取URL移动到已爬取集合
5:获取待爬取URL
实现方式
1:使用set(自动去除重复项目)
2:使用关系数据库(MySQL)
3:使用缓存数据库(redis):大型公司使用这玩意
网页下载器
功能列表
1:get
2:post
3:伪装头信息
4:HTTPCookieProcessor
5:ProxyHandler
6:HTTPSHandler
7:HTTPRedirectHAndler
实现方法
1:urllib2
2:URLlib3
3:requests
此处使用request实现
#coding=utf-8
import requests,json
url = 'http://www.baidu.com'
headers = {'user-agent':'Mozilla/5.0'} #模拟Mozilla浏览器头,此行可以为空
get_data = {'wd':'linux'}
r = requests.get(url,headers=headers,params = get_data)
if r.status_code == 200:
'访问成功'
try:
file = open('baidu.com','w')
file.write('本次访问网址是:' + r.url)
print('本次访问网址是:' + r.url)
except IOError as e:
print('文件读取错误:' + str(e))
try:
file = open('baidu.com','a+')
text = r.text
file.write('\n得到数据如下:\n' + text)
print('得到数据长度:' + str(len(r.content)))
except IOError as e:
print('文件读取错误:' + str(e))
else:
print('我是假的404')
解析器
1:正则表达式 传统经典,语法奇葩难懂
2:html.parser python自带
3:BeautifulSoup 可以使用上下两种解析器,集合天地精华
4:lxml 可以解析html和xml
#coding=utf-8
from bs4 import BeautifulSoup,re
try:
file = open('baidu.com','r')
html_str = file.read()
print(type(html_str))
except IOError as e:
print(str(e))
finally:
if 'file' in locals():
file.close()
if 'html_str' in locals():
#根据HTML网页字符串创建BeautifulSoup对象
soup = BeautifulSoup(
html_str, #html文档字符串
'html.parser', #html解析器,可以使用py自带的html_parser
from_encoding='utf-8' #文档编码格式
)
#soup.find(name,attrs,string) #只查找第一个匹配对象,支持正则表达式
nodes = soup.find_all('a')
for node in nodes:
print(node.name) #得到节点标签(参数1)
print(node['href']) #得到属性(参数2)
print(node.get_text()) #得到文字(参数3)
#正则匹配
nodes2 = soup.find_all('a',href=re.compile(r"map"))
print('\n\n\n\n\n---------------------------百年分割线------------------------\n')
for node in nodes2:
print(node.name) #得到节点标签(参数1)
print(node['href']) #得到属性(参数2)
print(node.get_text()) #得到文字(参数3)
使用python实现简单爬虫的更多相关文章
- Python开发简单爬虫 - 慕课网
课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 ...
- python实现简单爬虫抓取图片
最近在学习python,正如大家所知,python在网络爬虫方面有着广泛的应用,下面是一个利用python程序抓取网络图片的简单程序,可以批量下载一个网站更新的图片,其中使用了代理IP的技术. imp ...
- Python开发简单爬虫(一)
一 .简单爬虫架构: 爬虫调度端:启动爬虫,停止爬虫,监视爬虫运行情况 URL管理器:对将要爬取的和已经爬取过的URL进行管理:可取出带爬取的URL,将其传送给“网页下载器” 网页下载器:将URL指定 ...
- Python开发简单爬虫
简单爬虫框架: 爬虫调度器 -> URL管理器 -> 网页下载器(urllib2) -> 网页解析器(BeautifulSoup) -> 价值数据 Demo1: # codin ...
- Python做简单爬虫(urllib.request怎么抓取https以及伪装浏览器访问的方法)
一:抓取简单的页面: 用Python来做爬虫抓取网站这个功能很强大,今天试着抓取了一下百度的首页,很成功,来看一下步骤吧 首先需要准备工具: 1.python:自己比较喜欢用新的东西,所以用的是Pyt ...
- python多线程简单爬虫
爬虫本质就是将网站或者接口的数据经过筛选后按需求保存 这里实现一个简单爬虫仅供参考 import requests import bs4 import threading import queue i ...
- 教你如何入手用python实现简单爬虫微信公众号并下载视频
主要功能 如何简单爬虫微信公众号 获取信息:标题.摘要.封面.文章地址 自动批量下载公众号内的视频 一.获取公众号信息:标题.摘要.封面.文章URL 操作步骤: 1.先自己申请一个公众号 2.登录自己 ...
- python实现简单爬虫功能
在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...
- python scrapy简单爬虫记录(实现简单爬取知乎)
之前写了个scrapy的学习记录,只是简单的介绍了下scrapy的一些内容,并没有实际的例子,现在开始记录例子 使用的环境是python2.7, scrapy1.2.0 首先创建项目 在要建立项目的目 ...
随机推荐
- EL_JSTL
EL(Expression Language)EL表达式 作用:在JSP中消灭java代码 语法: "${ }" 用法:参考jsp页面 //Servlet中,: User user ...
- AngularJS(九):路由
本文也同步发表在我的公众号“我的天空” AngularJS路由 AngularJS路由可以让我们通过不同的URL访问不同页面(似乎是废话),其价值主要体现在单页面的web应用中(single page ...
- python2和3的区别丶网络编程以及socketserver多线程
一丶python2和python3的区别 1.编码&字符串 字符串: python2: Unicode v = u"root" 本质上用unicode存储(万国码) (s ...
- Android compress 压缩 会不会失真
微信的缩略图要求是不大于32k,这就需要对我的图片进行压缩.试了几种方法,一一道来. 代码如下 ByteArrayOutputStream baos = new ByteArrayOutputStre ...
- LeetCode Missing Number (简单题)
题意: 给一个含有n个整数的数组,数组中的元素应该是0-n.现在缺了其中某1个,找出缺少的那个整数? 思路: 0-n的总和是可以直接计算的,而缺少的那个就是sum减去数组的和. int missing ...
- 不得不承认pretty-midi很好用,以及一些简单的上手
官方文档在此: http://craffel.github.io/pretty-midi/ 首先我们演示如何将midi文件转变为piano-roll格式(matrix). 现在我们手中有了一个数据集, ...
- app再次进入数据不加载问题
问题原因:触发点击事件在加载页面之前完成. 1.调整了一下页面加载顺序 2.增加了settime的时间
- innerHTML和outerHTML的区别
一.区别:1)innerHTML: 从对象的起始位置到终止位置的全部内容,不包括Html标签.2)outerHTML: 除了包含innerHTML的全部内容外, 还包含对象标签本身. 二.例子: &l ...
- NYOJ-255-C小加 之 随机数
原题链接 C小加 之 随机数 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 ACM队的“C小加”同学想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用 ...
- 2018.6.9 MyEclipse连接Oracle数据库方法及步骤
在windows栏找到showXXX 然后选择最后一个others 找到Database 然后选择oracle 接着就是jar包的问题了 这个不同于mysql oracle如果装在了本机上面可以在文件 ...