[python]ソフトウェアエンジニアリング職のネットワーク爬虫類を確保https://www.51job.com

3381 ワード

まずはこのサイトのhttps://www.51job.com/robots.txtページ
ヒント:
            File not found

         ,    ,      。

       :
                  ,        。
   www.51job.com   ,               。
      ,      。

注意:
  • ネットワーク爬虫類:robotsを自動的または人工的に識別する.txt,さらにコンテンツ抽出
  • を行う.
  • 制約:robotsプロトコルは推奨するが非制約であり、遵守しないと法的リスクが存在する可能性がある
  • 1つのサイトがrobotsプロトコルを設定しない場合、すべてのコンテンツが這い出すことができることを示しているので、這い出すことができるコンテンツです.
    ソースプログラムは次のとおりです.
      
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @File  : HtmlParser.py
    # @Author:    
    # @Date  : 2020/2/28
    # @Desc  :             
    # @Contact : [email protected]
    
    from bs4 import BeautifulSoup
    import requests
    import csv
    import re
    import io
    
    #    
    head = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
    }
    #   
    url = "https://search.51job.com/list/000000,000000,0000,00,9,99,%25E8%25BD%25AF%25E4%25BB%25B6,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare="
    
    
    # csv    
    def headcsv():
        with open('/position.csv', 'w', encoding='utf-8', newline='') as csvfile:
            writer = csv.writer(csvfile)
            writer.writerow(["  ", "  ", "   ", "  ", "  ", "  "])
    
    
    # txt    
    def headtxt():
        ftxt = open('E:/data/position.txt', 'w', encoding='utf-8')
        ftxt.write("                  ")
        ftxt.close()
    
    
    def position(url, head):
        # fcsv = open('/position.csv', 'a', encoding='utf-8', newline='')
        ftxt = open('E:/data/position.txt', 'a', encoding='utf-8')
        try:
            r = requests.get(url, headers=head, timeout=3)
            #         
            r.encoding = r.apparent_encoding
            print(r.apparent_encoding)
            #      
            print(r.status_code)
            #       
            # print(r.text)
            # print(soup.prettify())
            text = r.text
            soup = BeautifulSoup(text, 'html.parser')
            #       
            item = soup.find_all(class_='el', recursive=True)
            num = 0
            for i in item:
                num += 1
                if num > 16:
                    itemdetail = i.text.replace(" ", "").replace("
    ", " ").replace(" ", " ").lstrip() + i.find("a").attrs['href'] print(itemdetail) ftxt.write(itemdetail.replace("
    ","")+'\r') print(" ") ftxt.close() except: print(" !") def write(url, head): for i in range(1, 2000): url = "https://search.51job.com/list/000000,000000,0000,00,9,99,%25E8%25BD%25AF%25E4%25BB%25B6,2,"+str(i)+".html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=" print(url) position(url, head) if __name__ == "__main__": # head() write(url, head)

    登録されたエントリは、職階会社の所在地の報酬日付のウェブサイトとして分布し、保存パスはE:/data/positionである.txtは、パスまたはファイルフォーマットを自分で変更できます.