python之路——爬虫实例

urlController.py

import bsController
from urllib import request

class SpiderMain(object):
    def __init__(self):
        self.header = {‘User-Agent‘: ‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11‘,
               ‘Accept‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8‘,
               ‘Accept-Charset‘: ‘ISO-8859-1,utf-8;q=0.7,*;q=0.3‘,
               ‘Accept-Encoding‘: ‘none‘,
               ‘Accept-Language‘: ‘en-US,en;q=0.8‘,
               ‘Connection‘: ‘keep-alive‘}
        self.bsManage = bsController.bsManage()

    def getUrl(self,rootUrl):
        for i in range(1,500):
            url = rootUrl+‘%s‘ %i+‘.html‘
            req = request.Request(url)
            for h in self.header:
                   req.add_header(h, self.header[h])
            try:
              html = request.urlopen(req).read()
              # print(html)
              self.bsManage.getPageUrl(html,i)
              req.close()
            except request.URLError as e:
              if hasattr(e, ‘code‘):
                print(‘Error code:‘,e.code)
              elif hasattr(e, ‘reason‘):
                print(‘Reason:‘,e.reason)

if __name__==‘__main__‘:
    rootUrl = ‘http://www.meitulu.com/item/‘
    obj_root = SpiderMain()
    obj_root.getUrl(rootUrl)

bsController.py

from bs4 import BeautifulSoup
from urllib import request
import os

class bsManage:
    def __init__(self):
        self.pageUrl = ‘http://www.meitulu.com/item/‘
        self.header = {
            ‘User-Agent‘: ‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11‘,
            ‘Accept‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8‘,
            ‘Accept-Charset‘: ‘ISO-8859-1,utf-8;q=0.7,*;q=0.3‘,
            ‘Accept-Encoding‘: ‘none‘,
            ‘Accept-Language‘: ‘en-US,en;q=0.8‘,
            ‘Connection‘: ‘keep-alive‘}

    # html是获取到的网页的html
    # i表示i_x.html
    def getPageUrl(self,html,i):
        soup = BeautifulSoup(html, ‘html.parser‘, from_encoding=‘utf-8‘)
        # 获取到最后一个连接
        lastUrl = soup.find_all(‘div‘, {‘id‘: ‘pages‘})[0].find_all(‘a‘)[-2][‘href‘]
        # print(html)
        # print(lastUrl)
        # 获取到最后一页的数字
        if i < 10:
            len = 1
        elif i<100:
            len = 2
        elif i<1000:
            len = 3
        elif i<10000:
            len = 4
        lastPage = int(lastUrl[29+len:-5])
        # 创建图片文件夹
        if not os.path.exists(‘img‘):
            os.mkdir(‘img‘)
        path = ‘img/%s‘ %i
        if not os.path.exists(path):
            os.mkdir(path)
        # 先爬取第一页 因为url格式不一样
        # 获取所需要图片的连接 array
        links = soup.find_all(‘img‘,class_=‘content_img‘)
        for link in links:
               name = str(link[‘src‘])[-21:]
               data = request.urlopen(link[‘src‘]).read()
               img = open(‘img/%s/‘ %i + name,‘wb+‘)
               img.write(data)
               img.close()
        # print(‘%d 已经爬完‘ %i)

        # str = self.pageUrl + ‘%s‘ %i + ‘.html‘
        # print(str)

        # 每一个页面下有lastPage个小页面
        for j in range(2,lastPage+1):
            # 重新拼接url 获取到下一页的url
            url = self.pageUrl + ‘%s_%s‘ %(i,j) + ‘.html‘
            self.saveImgWithUrl(url,i)
        print(‘%d 已经爬完‘ %i)

    def saveImgWithUrl(self,url,i):
        req = request.Request(url)
        for h in self.header:
            req.add_header(h, self.header[h])
        try:
            html = request.urlopen(req).read()
            soup = BeautifulSoup(html, ‘html.parser‘, from_encoding=‘utf-8‘)
            # 获取所需要图片的连接 array
            links = soup.find_all(‘img‘, class_=‘content_img‘)
            for link in links:
                name = str(link[‘src‘])[-21:]
                data = request.urlopen(link[‘src‘]).read()
                img = open(‘img/%s/‘ % i + name, ‘wb+‘)
                img.write(data)
                img.close()
        except request.URLError as e:
            if hasattr(e, ‘code‘):
                print(‘Error code:‘, e.code)
            elif hasattr(e, ‘reason‘):
                print(‘Reason:‘, e.reason)
时间: 2024-10-12 21:39:58

python之路——爬虫实例的相关文章

python之路 - 爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web

python之路 -- 爬虫 -- 高性能相关

高性能爬虫方案: 多进程 多线程 利用"异步非阻塞"模块实现单线程并发请求. 本质 1 sk = socket() 2 # 阻塞 3 sk.connect(('www.cnblogs.com',80)) 4 5 sk.sendall(b"GET /wupeiqi http1.1\r\n.....\r\n\r\n") 6 sk.sendall(b"POST /wupeiqi http1.1\r\n.....\r\n\r\nuser=alex&pwd=

python之路 -- 爬虫 -- Scrapy入门

Scrapy Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 下面是Scrapy的架构,包括组件以及在系统中发生的数据流的概览(绿色箭头所示).  数据流 Scra

python静态网页爬虫实例01

前些日子学习了一些爬虫知识,鉴于时间较短,就只看了静态网页爬虫内容,而有关scrapy爬虫框架将在后续继续探索. 以下以重庆市统计局官网某页面爬取为例(http://tjj.cq.gov.cn/tjsj/sjjd/201608/t20160829_434744.htm): 0.程序代码 1 import requests 2 from bs4 import BeautifulSoup 3 4 headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10

python之路--爬虫第二篇

内容简介:基于flask框架实现web微信的登录以及收发消息. 实现思路: 1.获取验证码,并检测是否在手机端扫码并确认登录(长轮询) 2.用户数据初始化获取的授权信息,并根据获取的授权信息获取联系人信息 3.发送消息,根据接受者的ID,并携带登陆授权的认证发送POST请求 4.接受消息,用长轮询的方式,去想服务器端发送求,并检测返回值中的'selector'值为0代表无新消息,2代表有新消息.无论为'0'or'2',都会接着发长轮询请求,如果为'2'就会向服务端请求新消息的内容. 需要注意的事

Python之路【第十九篇】:爬虫

Python之路[第十九篇]:爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. Requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. import

python爬虫实例详细介绍之爬取大众点评的数据

python 爬虫实例详细介绍之爬取大众点评的数据 一. Python作为一种语法简洁.面向对象的解释性语言,其便捷性.容易上手性受到众多程序员的青睐,基于python的包也越来越多,使得python能够帮助我们实现越来越多的功能.本文主要介绍如何利用python进行网站数据的抓取工作.我看到过利用c++和Java进行爬虫的代码,c++的代码很复杂,而且可读性.可理解性较低,不易上手,一般是那些高手用来写着玩加深对c++的理解的,这条路目前对我们不通.Java的可读性还可以,就是代码冗余比较多,

Python之路【第八篇】:堡垒机实例以及数据库操作

Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + import paramiko transport = paramiko.Transport(('hostname', 22)) transport.connect(username='wupeiqi', password='123') ssh

Python之路:堡垒机实例以及数据库操作

Python之路:堡垒机实例以及数据库操作 一.堡垒机前戏 开发堡垒机之前,先学习Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作. SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: #!/usr/bin/env  python# --*--coding:utf-8 --*--import paramiko #创建SSH对象ssh = paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh.se