python单线程爬虫code
广度优先算法:
# -*- coding: utf-8 -*-
import urllib
import urllib.request
from bs4 import BeautifulSoup
import threading
mylock = threading.RLock()
class Crawler:
unVisitUrl = set()
visitedUrl = []
def getHtml(self , url): html = ''
req = urllib.request.Request(url , headers = {
'Connection': 'Keep-Alive',
'Accept': 'text/html, application/xhtml+xml, */*',
'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
})
try:
respose = urllib.request.urlopen(req , timeout = 10)
html = respose.read().decode('UTF-8').replace(' ','')
except Exception as e:
pass return html; def getUrlFromHtml(self , html , sitePath): if(html):
soup = BeautifulSoup(html , 'html.parser')
aList = soup.find_all('a')
for a in aList:
try:
if sitePath in a['href'] and a['href'].startswith('http://'):
self.addUnVisitUrl(a['href'])
self.addVisitedUrl(a['href'])
except KeyError:
pass # 解析网页内容
def analysis(self , url , sitePath): self.initUnVisitUrl(url) while(len(self.unVisitUrl) > 0):
visitingUrl = self.getUnVisitUrl()
print(visitingUrl)
if(visitingUrl):
html = self.getHtml(visitingUrl)
if(html):
# 获取网页中所有内部链接,存储
self.getUrlFromHtml(html , sitePath) # 初始化根链接
def initUnVisitUrl(self , url):
self.unVisitUrl.add(url) def addUnVisitUrl(self , url):
if url not in self.unVisitUrl and url not in self.visitedUrl:
self.unVisitUrl.add(url) def getUnVisitUrl(self): url = None
unVisitUrlTmp = list(self.unVisitUrl)
if unVisitUrlTmp[0]:
url = unVisitUrlTmp[0]
self.unVisitUrl.remove(url) return url def addVisitedUrl(self , url):
self.visitedUrl.append(url)
python单线程爬虫code的更多相关文章
- 《精通python网络爬虫》笔记
<精通python网络爬虫>韦玮 著 目录结构 第一章 什么是网络爬虫 第二章 爬虫技能概览 第三章 爬虫实现原理与实现技术 第四章 Urllib库与URLError异常处理 第五章 正则 ...
- python简易爬虫来实现自动图片下载
菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)
原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
- Python网络爬虫
http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...
- python多线程爬虫设计及实现示例
爬虫的基本步骤分为:获取,解析,存储.假设这里获取和存储为io密集型(访问网络和数据存储),解析为cpu密集型.那么在设计多线程爬虫时主要有两种方案:第一种方案是一个线程完成三个步骤,然后运行多个线程 ...
- python网络爬虫,知识储备,简单爬虫的必知必会,【核心】
知识储备,简单爬虫的必知必会,[核心] 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌 ...
- Python网络爬虫笔记(五):下载、分析京东P20销售数据
(一) 分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1. 翻页的时候,谷歌F12的Network页签可以看到下面 ...
- python单线程,多线程和协程速度对比
在某些应用场景下,想要提高python的并发能力,可以使用多线程,或者协程.比如网络爬虫,数据库操作等一些IO密集型的操作.下面对比python单线程,多线程和协程在网络爬虫场景下的速度. 一,单线程 ...
随机推荐
- lockfree
为什么要lockfree 按我的理解, lockfree就是不去 调用操作系统给定的锁机制. 1. 会有system call, and system call is expensive; 比如pt ...
- 我的Sharepoint母版页的使用
在Sharepoint 2010母版页文件夹里面,有一个叫v4.master的母版页文件. 在它的基础上修改成想要的母版页.我们用最少的修改完成我们想要的效果. 我们有时是要这样的一个母版页,顶部Ri ...
- 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
1.概念介绍 如果你拥有一个开发者账户的话,在iOS Dev Center打开Certificates, Indentifiers & Profiles,你就可以看到如下的列表: Profil ...
- Minimum configuration for openldap to proxy multiple AD into a single search base
[root@localhost ~]# cd /etc/openldap[root@localhost openldap]# cat slapd.confloglevel 0x900include / ...
- iOS 开发-- enum与typeof enum用法
一, 两者的用法 枚举类型定义用关键字enum标识,形式为: enum标识符 { 枚举数据表 }; enum用来定义一系列宏定义常量区别用,相当于一系列的#define ** **,当然它后面的标识符 ...
- Android--短信
1.Android 提供一系列 API,可以是我们在自己的程序中发送和接收短信: 2.接收短信: 1)当手机接收到一条短信时,系统会发出一条值为 android.provider.Telephony. ...
- I am Nexus Master!(虽然只是个模拟题。。。但仍想了很久!)
I am Nexus Master! The 13th Zhejiang University Programming Contest 参见:http://www.bnuoj.com/bnuoj/p ...
- Vagrant 启用 rsync
折腾了那么久,发现这些smb,nfs,virtualcfs,这些同步方案在windows下都不是最完美的.最完美的还是 rsync,我使用它同步windows上的代码,在windows浏览器中打开虚拟 ...
- Runtime 交换方法
创建UIImage分类UIImage+Image.h #import<UIKit/UIKit.h> @interfaceUIImage (Image) + (__kindof UIImag ...
- SSIS内存不足
[SSIS.Pipeline] 信息: 缓冲区管理器检测到系统的虚拟内存不足,但无法换出任何缓冲区.考虑了 0 个缓冲区,锁定了 0 个缓冲区.或者是因未安装足够的内存或其他进程正在使用内存,以致于没 ...