社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

分享几个对于今天来说能帮助你的Python源码

python • 7 年前 • 333 次点击  


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. 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, headers=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, headers=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, headers=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'    (.*?) # 第一个参数   要替换的字符串   替换后的字符串

  35.        chapt_content = chapt_content[0].replace("    ","")

  36.        # print(chapt_content)    字符串  二愣子睁大着双眼,直直望着茅草和烂泥糊成的

  37.        chapt_content = chapt_content.replace("
    "
    ,"")

  38.        print("正在保存 %s"%novel_title)

  39.        # w 读写模式  wb

  40.        # f = open("{}.txt".format(novel_title),'w')

  41.        # f.write(chapt_content)

  42.        with open("{}.txt".format(novel_title),'w') as f:

  43.            f.write(chapt_content)

  44.        # f.close()

  45. getNovertContent()


爬取智联招聘(找一个高薪工作,赢娶白富美)


  1. #-*- coding: utf-8 -*-

  2. import re

  3. import csv

  4. import requests

  5. from tqdm import tqdm

  6. from urllib.parse import urlencode

  7. from requests.exceptions import RequestException

  8. def get_one_page( city, keyword, region, page):

  9.   '''

  10.   获取网页html内容并返回

  11.   '''

  12.   paras = {

  13.       'jl': city,         # 搜索城市

  14.       'kw': keyword,      # 搜索关键词

  15.       'isadv': 0,         # 是否打开更详细搜索选项

  16.       'isfilter': 1,      # 是否对结果过滤

  17.       'p': page,          # 页数

  18.       're': region        # region的缩写,地区,2005代表海淀

  19.   }

  20.   headers = {

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

  22.       'Host' : 'sou.zhaopin.com',

  23.       'Referer': 'https://www.zhaopin.com/',

  24.       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

  25.       'Accept-Encoding': 'gzip, deflate, br',

  26.       'Accept-Language': 'zh-CN,zh;q=0.9'

  27.   }

  28.   url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?' + urlencode (paras)

  29.   try:

  30.       # 获取网页内容,返回html数据

  31.       response = requests.get(url, headers=headers)

  32.       # 通过状态码判断是否获取成功

  33.       if response.status_code == 200:

  34.           return response.text

  35.       return None

  36.   except RequestException as e:

  37.       return None

  38. def parse_one_page(html):

  39.   '''

  40.   解析HTML代码,提取有用信息并返回

  41.   '''

  42.   # 正则表达式进行解析

  43.   pattern = re.compile( '(.*?).*?'        # 匹配职位信息

  44.       '(.*?).*?'     # 匹配公司网址和公司名称

  45.       '(.*?)', re.S)                                # 匹配月薪      

  46.   # 匹配所有符合条件的内容

  47.   items = re.findall(pattern, html)  

  48.   for item in items:

  49.       job_name = item[0]

  50.       job_name = job_name.replace('', '')

  51.       job_name = job_name.replace('', '')

  52.       yield {

  53.           'job': job_name,

  54.           'website': item[1 ],

  55.           'company': item[2],

  56.           'salary': item[3]

  57.       }

  58. def write_csv_file(path, headers, rows):

  59.   '''

  60.   将表头和行写入csv文件

  61.   '''

  62.   # 加入encoding防止中文写入报错

  63.   # newline参数防止每写入一行都多一个空行

  64.   with open(path, 'a', encoding='gb18030', newline='') as f:

  65.       f_csv = csv.DictWriter(f, headers)

  66.       f_csv.writeheader()

  67.       f_csv.writerows(rows)

  68. def write_csv_headers(path, headers):

  69.   '''

  70.   写入表头

  71.   '''

  72.   with open(path, 'a', encoding='gb18030', newline='') as f:

  73.       f_csv = csv.DictWriter( f, headers)

  74.       f_csv.writeheader()

  75. def write_csv_rows(path, headers, rows):

  76.   '''

  77.   写入行

  78.   '''

  79.   with open(path, 'a', encoding='gb18030', newline='') as f:

  80.       f_csv = csv.DictWriter(f, headers)

  81.       f_csv.writerows(rows)

  82. def main(city, keyword, region, pages):

  83.   '''

  84.   主函数

  85.   '''

  86.   filename = 'zl_' + city + '_' + keyword + '.csv'

  87.   headers = ['job', 'website', 'company', 'salary']

  88.   write_csv_headers(filename, headers)

  89.   for i in tqdm(range(pages)):

  90.       '''

  91.       获取该页中所有职位信息,写入csv文件

  92.       '''

  93.       jobs = []

  94.       html = get_one_page(city, keyword, region, i)

  95.       items = parse_one_page(html)

  96.       for item in items:

  97.           jobs.append(item)

  98.       write_csv_rows(filename, headers, jobs)

  99. if __name__ == '__main__':

  100.   main('北京', 'python工程师', 2005, 10)

520表白神器(让你七夕的时候不再孤单)


  1. from turtle import *

  2. from time import sleep

  3. def go_to(x, y):

  4.   up()

  5.   goto(x, y)

  6.   down()

  7. def big_Circle(size):  #函数用于绘制心的大圆

  8.   speed( 1)

  9.   for i in range(150):

  10.       forward(size)

  11.       right(0.3)

  12. def small_Circle(size):  #函数用于绘制心的小圆

  13.   speed(1)

  14.   for i in range(210):

  15.       forward(size)

  16.       right(0.786)

  17. def line(size):

  18.   speed(1)

  19.   forward(51*size)

  20. def heart( x, y, size):

  21.   go_to(x, y)

  22.   left(150)

  23.   begin_fill()

  24.   line(size)

  25.   big_Circle(size)

  26.   small_Circle(size)

  27.   left(120)

  28.   small_Circle(size)

  29.   big_Circle(size )

  30.   line(size)

  31.   end_fill()

  32. def arrow():

  33.   pensize(10)

  34.   setheading(0)

  35.   go_to(-400, 0)

  36.   left(15)

  37.   forward( 150)

  38.   go_to(339, 178)

  39.   forward(150)

  40. def arrowHead():

  41.   pensize(1)

  42.   speed(1)

  43.   color('red', 'red')

  44.   begin_fill()

  45.   left(120)

  46.   forward(20)

  47.   right(150)

  48.   forward(35)

  49.   right(120)

  50.   forward(35)

  51.   right(150)

  52.   forward(20)

  53.   end_fill ()

  54. def main():

  55.   pensize(2)

  56.   color('red', 'pink')

  57.   #getscreen().tracer(30, 0) #取消注释后,快速显示图案

  58.   heart(200, 0, 1)          #画出第一颗心,前面两个参数控制心的位置,函数最后一个参数可控制心的大小

  59.   setheading(0)             #使画笔的方向朝向x轴正方向

  60.   heart(-80, -100, 1.5)     #画出第二颗心

  61.   arrow()                   #画出穿过两颗心的直线

  62.   arrowHead()               #画出箭的箭头

  63.   go_to(400, -300)

  64.   write("author:520Python", move=True, align="left", font=( "宋体", 30, "normal"))

  65.   done()

  66. main()



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/tdQY8OYRwP
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/12243
 
333 次点击