工具准备的差不多了,接下来就是python爬虫的封装了

python爬虫的方便大家都懂的。那么,既然常用,那么我们当然要封装啦。

那么我们可以先封装一个父类的爬虫

我自己的设计想法就是,首先,爬虫必须要有个字段来存储匹配的规则gainRule,然后有个字段存储需要取什么属性outAttr,

然后就是有个需要处理的数据列表gainList,最后是一个存储输出列表数据的outList,和存储输出单条数据的outData

那么这个爬虫的父类定义如下

from bs4 import BeautifulSoup
import requests
import re
class SpiderHp:
    #gainRule页面的解析规则,outAttr页面存储的规则,gainList需要解析的列表页,
    def __init__(self,gainRule,outAttr=None,gainList=None):
        self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"}
        self.gainRule=gainRule
        self.outAttr=outAttr
        self.gainList=gainList
        self.req=requests.Session()
        self.outList=[]
        self.outData=""

    #处理列表数据
    def startAll(self,gainList=None):
        if gainList:
            self.gainList=gainList
        for url in self.gainList:
            self.InitUrlList(url)
    #处理单页数据
    def start(self,gainData):
        self.InitUrlList(gainData)

爬虫的基本功能ok之后。接着我们要定义自己的种类爬虫。

比如我们一般需要一个爬取单个页面,单个特征值的普通爬虫,那么。我们写一个爬虫继承父类

#单页单条数据爬虫
class SpiderSigDataHp(SpiderHp):
    def InitUrlList(self, url):
        reqData = self.req.get(url, headers=self.headers)
        soup = BeautifulSoup(reqData.text, "lxml")
        nodeList = soup.select(self.gainRule)
        if nodeList:
            if self.outAttr:
                self.outData=nodeList[0].get(self.outAttr)
            else:
                self.outData = nodeList[0]

像这个刚刚定义的爬虫我们一般可以用来爬取分页数量之类的。

接着我们再定义一个专门处理列表页的爬虫

#列表页通用爬虫
class SpiderListHp(SpiderHp):
    def InitUrlList(self, url):
        reqData = self.req.get(url, headers=self.headers)
        soup = BeautifulSoup(reqData.text, "lxml")
        nodeList = soup.select(self.gainRule)
        for node in nodeList:
            if self.outAttr:
                data=node.get(self.outAttr)
            else:
                data = node
            if data not in self.outList:
                self.outList.append(data)
        if not nodeList:
            print("nodelist err ",url)

最后再定义一个详情页的爬虫即可

#详情页爬虫
class SpiderDetailHp(SpiderHp):
    def InitUrlList(self, url):
        reqData = self.req.get(url, headers=self.headers)
        soup = BeautifulSoup(reqData.text, "lxml")
        data = {}
        for key in self.gainRule:
            ps = soup.select(self.gainRule[key])
            if ps:
                if self.outAttr[key]:
                    data[key]=ps[0].get(self.outAttr[key])
                else:
                    data[key] = ps[0]
                str=repr(data[key])
                #去掉标签数据。一般如果取到最后还有标签。都是没用的了
                data[key]=re.sub("<.+?>","",str)
        self.outList.append(data)

这样我们的爬虫就完成了。如果还有其他特殊需求的。可以再自己定义。

一般通过这三种爬虫的组合使用。可以解决大多数网页的捕获。接着我来随便演示下使用。

import Spider
import re

home="http://www.xxxxxxx.net/"  #就不告诉你们我在爬什么了
def main():
    url = home + "hmh/list_6_1.html"
    num=getPage(url)        #获取分页数量
    list=[home+"hmh/list_6_{}.html".format(i) for i in range(1,2)]
    hlist=getList(list)
    for i in range(len(hlist)):
        hlist[i]=home+hlist[i]
        print(hlist[i])
    imgList=getDetail(hlist)
    print(imgList)
    print(len(imgList))

#获取页面的分页数量
def getPage(url):
    gainRule = "span.pageinfo > strong"
    mgr = Spider.SpiderSigDataHp(gainRule)
    mgr.start(url)
    str=repr(mgr.outData)
    #去掉所有的标签的内容
    num=int(re.sub("<.+?>","",str))
    return num

#获取列表页
def getList(list):
    gainRule = "ul.piclist > li > a"
    outAttr = "href"
    mgr = Spider.SpiderListHp(gainRule, outAttr)
    mgr.startAll(list)
    return mgr.outList

#获取详情页信息
def getDetail(list):
    gainData ={}
    outAttr = {}
    gainData["image"]="#imgshow > img"
    gainData["page"]="li.thisclass > a"
    outAttr["image"]="src"
    outAttr["page"]=""
    mgr = Spider.SpiderDetailHp(gainData, outAttr)
    mgr.startAll(list)
    return mgr.outList

if __name__=="__main__":
    main()

好了。就这样。最后配合下载和保存数据库

时间: 2024-08-02 18:22:13

工具准备的差不多了,接下来就是python爬虫的封装了的相关文章

Python 爬虫的工具列表

这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib). requests -网络库. grab - 网络库(基于pycurl). pycurl - 网络库(绑定libcurl). urllib3 - Python HTTP库,安全连接池.支持文件post.可用性高. httplib2 - 网络库. RoboBrowser - 一个简单的.极具Python风格的Python库,无需独立的浏览器即可浏览网页. MechanicalSoup -一个与网站

python爬虫scrapy命令工具学习之篇三

命令行工具(Command line tools) 全局命令 startproject settings runspider shell fetch view version 项目命令 crawl check list edit parse genspider deploy bench 1.创建爬虫工程的命令 scrapy startproject myproject 2.控制项目创建一个spider scrapy genspider mydomain mydomain.com 3.使用爬虫进行

Python 爬虫的工具列表 附Github代码下载链接

这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pycurl). pycurl – 网络库(绑定libcurl). urllib3 – Python HTTP库,安全连接池.支持文件post.可用性高. httplib2 – 网络库. RoboBrowser – 一个简单的.极具Python风格的Python库,无需独立的浏览器即可浏览网页. MechanicalSoup -一个与网站

Python爬虫知识点——Chrome开发者工具Network

Chrome开发者工具中Network功能介绍 第一列Name:请求的名称,一般会将URL的最后一 部分内容当作名称. 第二列Status: 响应的状态码,这里显示为200,代表响应是正常的.通过状态码,我们可   以判断发送了请求之后是否得到了正常的响应. 第三列Type: 请求的文档类型.这里为document, 代表我们这次请求的是一个HTML文档,内容就是一些HTML代码. 第四列initiator: 请求源.用来标记请求是由哪个对象或进程发起的. 第五列Size: 从服务器下载的文件和

一个python爬虫工具类

写了一个爬虫工具类. # -*- coding: utf-8 -*- # @Time : 2018/8/7 16:29 # @Author : cxa # @File : utils.py # @Software: PyCharm from retrying import retry from decorators.decorators import decorator from glom import glom from config import headers import datetim

Python爬虫的步骤和工具

#四个步骤 1.查看crawl内容的源码格式          crawl的内容可以是 url(链接),文字,图片,视频 2.请求网页源码 (可能要设置)代理,限速,cookie 3.匹配 用正则表达式匹配 4.保存数据 文件操作 #两个基本工具(库) 1.urllib 2.requests #使用reuests库的一个例子,抓取可爱图片 import requests  #导入库import re url =r'https://www.woyaogexing.com/tupian/keai'

一些Python爬虫工具

爬虫可以简单分为三步骤:请求数据.解析数据和存储数据 .主要的一些工具如下: 请求相关 request 一个阻塞式http请求库. Selenium Selenium是一个自动化测试工具,可以驱动浏览器执行特定的动作,如点击,下拉等操作.对于一些javascript渲染的页面,这种抓取方式非常有效. ChromeDriver.GeckoDriver 只有安装了ChromeDriver和GeckoDriver之后,Selenium才能驱动Chrome或者Firefox浏览器来做相应的网页抓取. P

[Python爬虫]高并发cnblogs博客备份工具(可扩展成并行)

并发爬虫小练习. 直接粘贴到本地,命名为.py文件即可运行,运行时的参数为你想要爬取的用户.默认是本博客. 输出是以用户名命名的目录,目录内便是博客内容. 仅供学习python的多线程编程方法,后续会重写成并行爬虫. 爬虫代码如下: 1 # -*- coding:utf-8 -*- 2 from multiprocessing.managers import BaseManager 3 from pyquery import PyQuery 4 import os, sys, urllib 5

python 爬虫 百度贴吧签到小工具

import requests,re,timeheader ={ "Cookie":"登陆过账号后的cookie 必须填写", "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}#访问个人帐号下的贴吧主页url = "百