歡迎光臨
每天分享高質量文章

分享幾個對於今天來說能幫助你的Python原始碼

5.20
我愛你

爬取妹子圖小姐姐(安慰一下幼小的心靈)

  1. #!/usr/bin/env python

  2. # coding=utf-8

  3. import os

  4. import time

  5. import threading

  6. from multiprocessing import Pool, cpu_count

  7. import requests

  8. from bs4 import BeautifulSoup

  9. essay-headers = {

  10.    'X-Requested-With': 'XMLHttpRequest',

  11.    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '

  12.                  'Chrome/56.0.2924.87 Safari/537.36',

  13.    'Referer': "http://www.mmjpg.com"

  14. }

  15. dir_path = r"E:\mmjpg"      # 下載圖片儲存路徑

  16. def save_pic(pic_src, pic_cnt):

  17.    """ 將圖片下載到本地檔案夾 """

  18.    try:

  19.        img = requests.get(pic_src, essay-headers=essay-headers, timeout=10)

  20.        imgname = "pic_cnt_{}.jpg".format(pic_cnt + 1)

  21.        with open(imgname, 'ab') as f:

  22.            f.write(img.content)

  23.            print(imgname)

  24.    except Exception as e:

  25.        print(e)

  26. def make_dir(folder_name):

  27.    """ 新建套圖檔案夾並切換到該目錄下 """

  28.    path = os.path.join(dir_path, folder_name)

  29.    # 如果目錄已經存在就不用再次爬取了,去重,提高效率。存在傳回 False,否則反之

  30.    if not os.path.exists(path):

  31.        os.makedirs(path)

  32.        print(path)

  33.        os.chdir(path)

  34.        return True

  35.    print("Folder has existed!")

  36.    return False

  37. def delete_empty_dir(dir):

  38.    """ 如果程式半路中斷的話,可能存在已經新建好檔案夾但是仍沒有下載的圖片的情況

  39.    但此時檔案夾已經存在所以會忽略該套圖的下載,此時要刪除空檔案夾 """

  40.    if os.path.exists(dir):

  41.        if os.path.isdir(dir):

  42.            for d in os.listdir(dir):

  43.                path = os.path.join(dir, d)     # 組裝下一級地址

  44.                if os.path.isdir(path):

  45.                    delete_empty_dir(path)      # 遞迴刪除空檔案夾

  46.        if not os.listdir(dir):

  47.            os.rmdir(dir)

  48.            print("remove the empty dir: {}".format(dir))

  49.    else:

  50.        print("Please start your performance!") # 請開始你的表演

  51. lock = threading.Lock()     # 全域性資源鎖

  52. def urls_crawler(url):

  53.    """ 爬蟲入口,主要爬取操作 """

  54.    try:

  55.        r = requests.get(url, essay-headers=essay-headers, timeout=10).text

  56.        # 套圖名,也作為檔案夾名

  57.        folder_name = BeautifulSoup(r, 'lxml').find('h2').text.encode('ISO-8859-1').decode('utf-8')

  58.        with lock:

  59.            if make_dir(folder_name):

  60.                # 套圖張數

  61.                max_count = BeautifulSoup(r, 'lxml').find('div', class_='page').find_all('a')[-2].get_text()

  62.                # 套圖頁面

  63.                page_urls = [url + "/" + str(i) for i in range(1, int(max_count) + 1)]

  64.                # 圖片地址

  65.                img_urls = []

  66.                for index, page_url in enumerate(page_urls):

  67.                    result = requests.get(page_url, essay-headers=essay-headers, timeout=10).text

  68.                    # 最後一張圖片沒有a標簽直接就是img所以分開解析

  69.                    if index + 1 < len(page_urls):

  70.                        img_url = BeautifulSoup(result, 'lxml').find('div', class_='content').find('a').img['src']

  71.                        img_urls.append(img_url)

  72.                    else:

  73.                        img_url = BeautifulSoup(result, 'lxml').find('div', class_='content').find('img')['src']

  74.                        img_urls.append(img_url)

  75.                for cnt, url in enumerate(img_urls):

  76.                    save_pic(url, cnt)

  77.    except Exception as e:

  78.        print(e)

  79. if __name__ == "__main__":

  80.    urls = ['http://mmjpg.com/mm/{cnt}'.format(cnt=cnt) for cnt in range(1, 953)]

  81.    pool = Pool(processes=cpu_count())

  82.    try:

  83.        delete_empty_dir(dir_path)

  84.        pool.map(urls_crawler, urls)

  85.    except Exception as e:

  86.        time.sleep(30)

  87.        delete_empty_dir(dir_path)

  88.        pool.map(urls_crawler, urls)

爬取網路小說(讓你今天不那麼孤單無聊)

  1. import urllib.request

  2. import re

  3. # 1 獲取主頁原始碼

  4. # 2 獲取章節超連結

  5. # 3 獲取章節超連結原始碼

  6. # 4 獲取小說內容

  7. # 5 下載,檔案操作

  8. # 駝峰命名法

  9. # 獲取小說內容

  10. def getNovertContent():

  11.    #

  12.    html = urllib.request.urlopen("http://www.quanshuwang.com/book/0/269").read()

  13.    html = html.decode("gbk")

  14.    # 不加括號  不匹配

  15.    # 正則運算式  .*?  匹配所有

  16.    reg = r'

  17. (.*?)
  18. '

  19.    # 增加效率的

  20.    reg = re.compile(reg)

  21.    urls = re.findall(reg,html)

  22.    # print(urls)

  23.    # 串列

  24.    # [(http://www.quanshuwang.com/book/0/269/78850.html,第一章 山邊小村),

  25.    # (http://www.quanshuwang.com/book/0/269/78854.html,第二章 青牛鎮)]

  26.    for url in urls:

  27.        # 章節的URL地址

  28.        novel_url = url[0]

  29.        # 章節標題

  30.        novel_title = url[1]

  31.        chapt = urllib.request.urlopen(novel_url).read()

  32.        chapt_html = chapt.decode("gbk")

  33.        # r 表示原生字串   \ \\d  r"\d"

  34.        reg = r'

    (.*?)

分享創造快樂

© 2024 知識星球   網站地圖