python 2.7 파충류 웹 페이지 데이터 구현

6023 단어 python파충
최근 에 Python 을 배우 고 간단 한 파충류 가 되 었 습 니 다.간단 한 demo 로 서 저 와 같은 초보 자 를 도와 주 고 싶 습 니 다.
코드 는 python 2.7 로 만 든 파충 류 를 사용 합 니 다.  51job 위의 직위 명,회사 명,임금,발표 시간 등 을 잡다.
코드 를 직접 올 리 면 코드 에 주석 이 비교적 명확 한 편 입 니 다.my sql 을 설치 하지 않 으 면 관련 코드 를 차단 해 야 합 니 다.

#!/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('
------------' + page + '--------------
') 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 = "
" 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')
이렇게 웹 페이지 데 이 터 를 캡 처 하 는 형식 은 다음 과 같 습 니 다.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기