python单线程爬虫code

时间:2022-12-11 13:43:01

广度优先算法:

# -*- 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('&nbsp','')
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的更多相关文章

  1. 《精通python网络爬虫》笔记

    <精通python网络爬虫>韦玮 著 目录结构 第一章 什么是网络爬虫 第二章 爬虫技能概览 第三章 爬虫实现原理与实现技术 第四章 Urllib库与URLError异常处理 第五章 正则 ...

  2. python简易爬虫来实现自动图片下载

    菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...

  3. Python 网页爬虫 &amp&semi; 文本处理 &amp&semi; 科学计算 &amp&semi; 机器学习 &amp&semi; 数据挖掘兵器谱(转)

    原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...

  4. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  5. Python网络爬虫

    http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...

  6. python多线程爬虫设计及实现示例

    爬虫的基本步骤分为:获取,解析,存储.假设这里获取和存储为io密集型(访问网络和数据存储),解析为cpu密集型.那么在设计多线程爬虫时主要有两种方案:第一种方案是一个线程完成三个步骤,然后运行多个线程 ...

  7. python网络爬虫,知识储备,简单爬虫的必知必会,【核心】

    知识储备,简单爬虫的必知必会,[核心] 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌 ...

  8. Python网络爬虫笔记(五):下载、分析京东P20销售数据

    (一)  分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1.      翻页的时候,谷歌F12的Network页签可以看到下面 ...

  9. python单线程,多线程和协程速度对比

    在某些应用场景下,想要提高python的并发能力,可以使用多线程,或者协程.比如网络爬虫,数据库操作等一些IO密集型的操作.下面对比python单线程,多线程和协程在网络爬虫场景下的速度. 一,单线程 ...

随机推荐

  1. CSS:&commat;font-face的使用方法

    1.介绍 @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当 ...

  2. POSIX&comma; Bash&comma; GPL etc

    POSIX , SUS, XSI Portable Operating System Interface POSIX是给Unix/Linux系统使用的通用调用接口(SCI, System Call I ...

  3. 原生JS实现幻灯片轮播效果

    在以往的认知中,一直以为用原生JS写轮播是件很难得事情,今天上班仿照网上的写了一个小demo.小试牛刀. 大致效果: html结构很简单,两个列表,一个代表图片列表,一个是右下角序号列表. <d ...

  4. Activity的任务栈Task以及启动模式与Intent的Flag详解

    什么是任务栈(Task) 官方文档是这么解释的 任务是指在执行特定作业时与用户交互的一系列 Activity. 这些 Activity 按照各自的打开顺序排列在堆栈(即“返回栈”)中. 其实就是以栈的 ...

  5. dotnet core error 0x80070057

    安装补丁KB2533623 https://support.microsoft.com/en-us/kb/2533623

  6. 从一个国内普通开发者的视角谈谈Sitecore

    一.Sitecore是个神马玩意 简而言之,Sitecore就是一个基于ASP.NET技术的CMS系统,它不仅具有传统Web CMS的所有功能,还集成了Marketing营销(当然,这个功能价格不菲) ...

  7. Unity进阶----Lua语言知识点&lpar;2018&sol;11&sol;08&rpar;

    国内开发: 敏捷开发: 集中精力加班堆出来第一个版本 基本没啥大的bug 国外开发: 1).需求分析: 2).讨论 3).分模块 4).框架 5).画UML图(类图class function)(e- ...

  8. Vscode调试C的多文件工程配置

    关于Vscode的C语言的单文件调试,可以参见VScode调试C语言的设置(win10,Linux),里面已经说明基本的配置和使用. 下面说明一下如何调试多个文件的工程,首先写一个简单的工程,其中工程 ...

  9. mybatis&lowbar;动态sql 查询、更新

    1)sql where 条件 select id="find" parameterType="User" resultType="User" ...

  10. BZOJ&period;4552&period;&lbrack;HEOI2016&sol;TJOI2016&rsqb;排序&lpar;线段树合并&sol;二分 线段树&rpar;

    题目链接 对于序列上每一段连续区间的数我们都可以动态开点建一棵值域线段树.初始时就是\(n\)棵. 对于每次操作,我们可以将\([l,r]\)的数分别从之前它所属的若干段区间中分离出来,合并. 对于升 ...