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(‘&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)
时间: 2024-08-26 05:00:18

python单线程爬虫code的相关文章

Python网络爬虫

http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成一个网站,那么

Python网络爬虫与信息提取(中国大学mooc)

目录 目录 Python网络爬虫与信息提取 淘宝商品比价定向爬虫 目标获取淘宝搜索页面的信息 理解淘宝的搜索接口翻页的处理 技术路线requests-refootnote 代码如下 股票数据定向爬虫 列表内容 爬取网站原则 代码如下 代码优化 Python网络爬虫与信息提取 淘宝商品比价定向爬虫 股票数据定向爬虫 1. 淘宝商品比价定向爬虫 功能描述 目标:获取淘宝搜索页面的信息 理解:淘宝的搜索接口翻页的处理 技术路线:requests-re[^footnote]. 代码如下: #CrowTa

[Python]网络爬虫(三):异常的处理和HTTP状态码的分类(转)

先来说一说HTTP的异常处理问题.当urlopen不能够处理一个response时,产生urlError.不过通常的Python APIs异常如ValueError,TypeError等也会同时产生.HTTPError是urlError的子类,通常在特定HTTP URLs中产生. 1.URLError通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生. 这种情况下,异常同样会带有"reason"属性,它是一个tuple(可以理解为不可变的数组),

Python]网络爬虫

Originated From: http://blog.csdn.net/pi9nc/article/details/9734437#comments [Python]网络爬虫(一):抓取网页的含义和URL基本构成 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些

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

原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开发语言是C/C++,但平时的很多文本数据处理任务都交给了Python.离开腾讯创业后,第一个作品课程图谱也是选择了Python系的Flask框架,渐渐的将自己的绝大部分工作交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处理,科学计算,机器学习和数据挖掘领域,有很多很多

【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱

好文 mark http://www.52nlp.cn/python-%E7%BD%91%E9%A1%B5%E7%88%AC%E8%99%AB-%E6%96%87%E6%9C%AC%E5%A4%84%E7%90%86-%E7%A7%91%E5%AD%A6%E8%AE%A1%E7%AE%97-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0-%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工

python+SQLAlchemy+爬虫

前面分享了SQLAlchemy的知识,这次我共享一下学习用python开发爬虫再把爬出来的数据放到用SQLAlchemy的数据库上面的知识,当然我这个是带测试,后面我和附带用TDD写的测试. """ 一个简单的豆瓣音乐前250爬虫 Author: Jar.guo email:[email protected] Date: 2016-08-27 Language: Python2.7.10 """ import urllib2 import sys

python写爬虫使用urllib2方法

python写爬虫使用urllib2方法 整理了一部分urllib2的使用细节. 1.Proxy 的设置 urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy. 如果想在程序中明确控制 Proxy 而不受环境变量的影响,可以使用代理. 新建test14来实现一个简单的代理Demo: import urllib2 enable_proxy = True proxy_handler = urllib2.ProxyHandler({"http" : 'htt

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

爬虫的基本步骤分为:获取,解析,存储.假设这里获取和存储为io密集型(访问网络和数据存储),解析为cpu密集型.那么在设计多线程爬虫时主要有两种方案:第一种方案是一个线程完成三个步骤,然后运行多个线程:第二种方案是每个步骤运行一个多线程,比如N个线程进行获取,1个线程进行解析(多个线程之间切换会降低效率),N个线程进行存储. 下面我们尝试抓取http://www.chembridge.com/ 库存药品信息. 首先确定url为http://www.chembridge.com/search/se