侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python2.7实现爬虫网页数据

Python  /  管理员 发布于 7年前   162

最近刚学习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') 

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

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


  • 上一条:
    关于Python的一些学习总结
    下一条:
    python sys.argv[]用法实例详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客