python2.7实现爬虫网页数据

最近刚学习Python,做了个简单的爬虫,作为一个简单的demo希望帮助和我一样的初学者。

代码使用python2.7做的爬虫  抓取51job上面的职位名,公司名,薪资,发布时间等等。

直接上代码,代码中注释还算比较清楚 ,没有安装mysql需要屏蔽掉相关代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*- 

from bs4 import BeautifulSoup
import urllib
import urllib2
import codecs
import re
import time
import logging
import MySQLdb 

class Jobs(object): 

  # 初始化
  """docstring for Jobs""" 

  def __init__(self):
    super(Jobs, self).__init__() 

    logging.basicConfig(level=logging.DEBUG,
         format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
    #数据库的操作,没有mysql可以做屏蔽
    self.db = MySQLdb.connect('127.0.0.1','root','rootroot','MySQL_Test',charset='utf8')
    self.cursor = self.db.cursor() 

    #log日志的显示
    self.logger = logging.getLogger("sjk") 

    self.logger.setLevel(level=logging.DEBUG) 

    formatter = logging.Formatter(
      '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler = logging.FileHandler('log.txt')
    handler.setFormatter(formatter)
    handler.setLevel(logging.DEBUG)
    self.logger.addHandler(handler) 

    self.logger.info('初始化完成') 

  # 模拟请求数据
  def jobshtml(self, key, page='1'):
    try:
      self.logger.info('开始请求第' + page + '页')
      #网页url
      searchurl = "https://search.51job.com/list/040000,000000,0000,00,9,99,{key},2,{page}.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=" 

      user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0'
      #设置请求头
      header = {'User-Agent': user_agent, 'Host': 'search.51job.com',
           'Referer': 'https://www.51job.com/'}
      #拼接url
      finalUrl = searchurl.format(key=key, page=page) 

      request = urllib2.Request(finalUrl, headers=header) 

      response = urllib2.urlopen(request)
      #等待网页加载完成
      time.sleep(3)
      #gbk格式解码
      info = response.read().decode('gbk') 

      self.logger.info('请求网页网页') 

      self.decodeHtml(info=info, key=key, page=page) 

    except urllib2.HTTPError as e:
      print e.reason 

  # 解析网页数据
  def decodeHtml(self, info, key, page):
    self.logger.info('开始解析网页数据')
    #BeautifulSoup 解析网页
    soup = BeautifulSoup(info, 'html.parser')
    #找到class = t1 t2 t3 t4 t5 的标签数据
    ps = soup.find_all(attrs={"class": re.compile(r'^t[1-5].*')})
    #打开txt文件 a+ 代表追加
    f = codecs.open(key + '.txt', 'a+', 'UTF-8')
    #清除之前的数据信息
    f.truncate() 

    f.write('\n------------' + page + '--------------\n') 

    count = 1 

    arr = []
    #做一些字符串的处理,形成数据格式  iOS开发工程师 有限公司 深圳-南山区 0.9-1.6万/月 05-16
    for pi in ps:
      spe = " "
      finalstr = pi.getText().strip()
      arr.append(finalstr)
      if count % 5 == 0:
        #每一条数据插入数据库,如果没有安装mysql 可以将当前行注释掉
        self.connectMySQL(arr=arr)
        arr = []
        spe = "\n"
      writestr = finalstr + spe
      count += 1
      f.write(writestr)
    f.close() 

    self.logger.info('解析完成') 

#数据库操作 没有安装mysql 可以屏蔽掉
  def connectMySQL(self,arr):
    work=arr[0]
    company=arr[1]
    place=arr[2]
    salary=arr[3]
    time=arr[4] 

    query = "select * from Jobs_tab where \
    company_name='%s' and work_name='%s' and work_place='%s' \
    and salary='%s' and time='%s'" %(company,work,place,salary,time)
    self.cursor.execute(query) 

    queryresult = self.cursor.fetchall()
    #数据库中不存在就插入数据 存在就可以更新数据 不过我这边没有写
    if len(queryresult) > 0:
      sql = "insert into Jobs_tab(work_name,company_name,work_place,salary\
          ,time) values('%s','%s','%s','%s','%s')" %(work,company,place,salary,time) 

      try:
        self.cursor.execute(sql)
        self.db.commit() 

      except Exception as e:
        self.logger.info('写入数据库失败') 

  #模拟登陆
  # def login(self):
  #   data = {'action':'save','isread':'on','loginname':'18086514327','password':'kui4131sjk'} 

  # 开始抓取 主函数
  def run(self, key): 

    # 只要前5页的数据 key代表搜索工做类型 这边我是用的ios page是页数
    for x in xrange(1, 6):
      self.jobshtml(key=key, page=str(x)) 

    self.logger.info('写入数据库完成') 

    self.db.close() 

if __name__ == '__main__': 

  Jobs().run(key='iOS') 

这样抓取网页数据格式如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python使用爬虫爬取静态网页图片的方法详解

    本文实例讲述了Python使用爬虫爬取静态网页图片的方法.分享给大家供大家参考,具体如下: 爬虫理论基础 其实爬虫没有大家想象的那么复杂,有时候也就是几行代码的事儿,千万不要把自己吓倒了.这篇就清晰地讲解一下利用Python爬虫的理论基础. 首先说明爬虫分为三个步骤,也就需要用到三个工具. ① 利用网页下载器将网页的源码等资源下载. ② 利用URL管理器管理下载下来的URL ③ 利用网页解析器解析需要的URL,进而进行匹配. 网页下载器 网页下载器常用的有两个.一个是Python自带的urlli

  • 解决Python网页爬虫之中文乱码问题

    Python是个好工具,但是也有其固有的一些缺点.最近在学习网页爬虫时就遇到了这样一种问题,中文网站爬取下来的内容往往中文显示乱码.看过我之前博客的同学可能知道,之前爬取的一个学校网页就出现了这个问题,但是当时并没有解决,这着实成了我一个心病.这不,刚刚一解决就将这个方法公布与众,大家一同分享. 首先,我说一下Python中文乱码的原因,Python中文乱码是由于Python在解析网页时默认用Unicode去解析,而大多数网站是utf-8格式的,并且解析出来之后,python竟然再以Unicod

  • Python爬虫之网页图片抓取的方法

    一.引入 这段时间一直在学习Python的东西,以前就听说Python爬虫多厉害,正好现在学到这里,跟着小甲鱼的Python视频写了一个爬虫程序,能实现简单的网页图片下载. 二.代码 __author__ = "JentZhang" import urllib.request import os import random import re def url_open(url): ''' 打开网页 :param url: :return: ''' req = urllib.reques

  • python爬虫_实现校园网自动重连脚本的教程

    一.背景 最近学校校园网不知道是什么情况,总出现掉线的情况.每次掉线都需要我手动打开web浏览器重新进行账号密码输入,重新进行登录.系统的问题我没办法解决,但是可以写一个简单的python脚本用于自动登录校园网.每次掉线后,再打开任意网页就是这个页面. 二.实现代码 #-*- coding:utf-8 -*- __author__ = 'pf' import time import requests class Login: #初始化 def __init__(self): #检测间隔时间,单位

  • Python实现爬虫从网络上下载文档的实例代码

    最近在学习Python,自然接触到了爬虫,写了一个小型爬虫软件,从初始Url解析网页,使用正则获取待爬取链接,使用beautifulsoup解析获取文本,使用自己写的输出器可以将文本输出保存,具体代码如下: Spider_main.py # coding:utf8 from baike_spider import url_manager, html_downloader, html_parser, html_outputer class SpiderMain(object): def __ini

  • Python爬取成语接龙类网站

    介绍 本文将展示如何利用Python爬虫来实现诗歌接龙. 该项目的思路如下: 利用爬虫爬取诗歌,制作诗歌语料库: 将诗歌分句,形成字典:键(key)为该句首字的拼音,值(value)为该拼音对应的诗句,并将字典保存为pickle文件: 读取pickle文件,编写程序,以exe文件形式运行该程序. 该项目实现的诗歌接龙,规则为下一句的首字与上一句的尾字的拼音(包括声调)一致.下面将分步讲述该项目的实现过程. 诗歌语料库 首先,我们利用Python爬虫来爬取诗歌,制作语料库.爬取的网址为:https

  • Python 网络爬虫--关于简单的模拟登录实例讲解

    和获取网页上的信息不同,想要进行模拟登录还需要向服务器发送一些信息,如账号.密码等等. 模拟登录一个网站大致分为这么几步: 1.先将登录网站的隐藏信息找到,并将其内容先进行保存(由于我这里登录的网站并没有额外信息,所以这里没有进行信息筛选保存) 2.将信息进行提交 3.获取登录后的信息 先给上源码 <span style="font-size: 14px;"># -*- coding: utf-8 -*- import requests def login(): sessi

  • python爬虫 使用真实浏览器打开网页的两种方法总结

    1.使用系统自带库 os 这种方法的优点是,任何浏览器都能够使用, 缺点不能自如的打开一个又一个的网页 import os os.system('"C:/Program Files/Internet Explorer/iexplore.exe" http://www.baidu.com') 2.使用python 集成的库 webbroswer python的webbrowser模块支持对浏览器进行一些操作,主要有以下三个方法: import webbrowser webbrowser.

  • Python3.x爬虫下载网页图片的实例讲解

    一.选取网址进行爬虫 本次我们选取pixabay图片网站 url=https://pixabay.com/ 二.选择图片右键选择查看元素来寻找图片链接的规则 通过查看多个图片路径我们发现取src路径都含有 https://cdn.pixabay.com/photo/ 公共部分且图片格式都为.jpg 因此正则表达式为 re.compile(r'^https://cdn.pixabay.com/photo/.*?jpg$') 通过以上的分析我们可以开始写程序了 #-*- coding:utf-8 -

  • python2.7实现爬虫网页数据

    最近刚学习Python,做了个简单的爬虫,作为一个简单的demo希望帮助和我一样的初学者. 代码使用python2.7做的爬虫  抓取51job上面的职位名,公司名,薪资,发布时间等等. 直接上代码,代码中注释还算比较清楚 ,没有安装mysql需要屏蔽掉相关代码: #!/usr/bin/python # -*- coding: UTF-8 -*- from bs4 import BeautifulSoup import urllib import urllib2 import codecs im

  • python爬虫爬取网页数据并解析数据

    1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序. 只要浏览器能够做的事情,原则上,爬虫都能够做到. 2.网络爬虫的功能 网络爬虫可以代替手工做很多事情,比如可以用于做搜索引擎,也可以爬取网站上面的图片,比如有些朋友将某些网站上的图片全部爬取下来,集中进行浏览,同时,网络爬虫也可以用于金融投资领域,比如可以自动爬取一些金融信息,并进行投资分析等. 有时,我们比较喜欢的新闻网站可能有几个,每次都要分别

  • python教程网络爬虫及数据可视化原理解析

    目录 1 项目背景 1.1Python的优势 1.2网络爬虫 1.3数据可视化 1.4Python环境介绍 1.4.1简介 1.4.2特点 1.5扩展库介绍 1.5.1安装模块 1.5.2主要模块介绍 2需求分析 2.1 网络爬虫需求 2.2 数据可视化需求 3总体设计 3.1 网页分析 3.2 数据可视化设计 4方案实施 4.1网络爬虫代码 4.2 数据可视化代码 5 效果展示 5.1 网络爬虫 5.1.1 爬取近五年主要城市数据 5.1.2 爬取2019年各省GDP 5.1.3 爬取豆瓣电影

  • Python爬虫网页元素定位术

    目录 实战场景 基础用法如下所示 BeautifulSoup 模块的对象说明 BeautifulSoup 对象 Tag 对象 NavigableString 对象 Comment 对象 find() 方法和 find_all() 方法 实战场景 初学 Python 爬虫,十之八九大家采集的目标是网页,因此快速定位到网页内容,就成为我们面临的第一道障碍,本篇博客就为你详细说明最易上手的网页元素定位术,学完就会系列. 本文核心使用到的是 Beautiful Soup 模块,因此我们用来做测试采集的站

  • Python爬虫获取数据保存到数据库中的超详细教程(一看就会)

    目录 1.简介介绍 2.Xpath获取页面信息 3.通过Xpath爬虫实操 3-1.获取xpath 完整代码展示: 总结 1.简介介绍 -网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫.-一般在浏览器上可以获取到的,通过爬虫也可以获取到,常见的爬虫语言有PHP,JAVA,C#,C++,Python,为啥我们经常听到说的都是Python爬虫,这是

  • C# 利用代理爬虫网页的实现方法

    C# 利用代理爬虫网页 实现代码: // yanggang@mimvp.com // http://proxy.mimvp.com // 2015-11-09 using System; using System.IO; using System.Net; using System.Text; namespace ConsoleApplication1 { class Program { public static void Main(string[] args) { System.Net.We

  • nodeJs爬虫获取数据简单实现代码

    本文实例为大家分享了nodeJs爬虫获取数据代码,供大家参考,具体内容如下 var http=require('http'); var cheerio=require('cheerio');//页面获取到的数据模块 var url='http://www.jcpeixun.com/lesson/1512/'; function filterData(html){ /*所要获取到的目标数组 var courseData=[{ chapterTitle:"", videosData:{ v

  • Java获取网页数据步骤方法详解

    在很多行业当中,我们需要对行业进行分析,就需要对这个行业的数据进行分类,汇总,及时分析行业的数据,对于公司未来的发展,有很好的参照和横向对比.面前通过网络进行数据获取是一个很有效而且快捷的方式. 首先我们来简单的介绍一下,利用java对网页数据进行抓取的一些步骤,有不足的地方,还望指正,哈哈.屁话不多说了. 其实一般分为以下步骤: 1:通过HttpClient请求到达某网页的url访问地址(特别需要注意的是请求方式) 2:获取网页源码 3:查看源码是否有我们需要提取的数据 4:对源码进行拆解,一

  • python 爬虫网页登陆的简单实现

    相信各位在写 python 爬虫的时候会在爬取网站时遇到一些登陆的问题,比如说登陆时遇到输入验证码比如说登录时遇到图片拖拽等验证,如何解决这类问题呢?一般有两种方案. 使用 cookie 登陆 我们可以通过使用 cookies 登陆,首先获取浏览器的 cookie,然后利用 requests 库直接登陆 cookie,服务器就会认为你是一个真实登陆用户,所以就会返回给你一个已登陆的状态,这个方法是很好用的,基本上绝大部分的需要验证码登录的网站都可以通过 cookie 登录来解决, #! -*-

  • Selenium+Tesseract-OCR智能识别验证码爬取网页数据的实例

    目录 1.项目需求描述 2.整体思路 3.功能实现 1.项目需求描述 通过订单号获取某系统内订单的详细数据,不需要账号密码的登录验证,但有图片验证码的动态识别,将获取到的数据存到数据库. 2.整体思路 1.通过Selenium技术,无窗口模式打开浏览器 2.在输入框中动态输入订单号 3.将图片验证码截图保存到本地 4.通过Tesseract-OCR技术去本地识别验证码转化为文字 5.将获取的验证码输入输入框 6.点击查询获取列表数据 3.功能实现 1.下载并安装Google浏览器,安装Googl

随机推荐