2024-08-11



import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.OptionalInt;
import java.util.stream.IntStream;
 
public class StreamApiExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
 
        // 计算总和、平均数、最大值、最小值、数量
        IntSummaryStatistics stats = numbers.stream()
                .filter(i -> i % 2 == 0) // 过滤出偶数
                .mapToInt(Integer::intValue)
                .summaryStatistics();
 
        System.out.println("偶数总和: " + stats.getSum());
        System.out.println("偶数平均数: " + stats.getAverage());
        System.out.println("偶数最大值: " + stats.getMax());
        System.out.println("偶数最小值: " + stats.getMin());
        System.out.println("偶数数量: " + stats.getCount());
 
        // 查找第一个偶数
        OptionalInt firstEven = numbers.stream()
                .mapToInt(Integer::intValue)
                .filter(i -> i % 2 == 0)
                .findFirst();
 
        firstEven.ifPresent(i -> System.out.println("第一个偶数: " + i));
 
        // 使用IntStream生成一个数字流
        IntStream.range(1, 5)
                .forEach(n -> System.out.println("生成的数字: " + n));
    }
}

这段代码首先使用了一个简单的列表来模拟数据源,然后通过Java Stream API对偶数进行了过滤、统计、查找和生成操作。这个例子展示了如何使用Java Stream API的常用方法,并且提供了一个简单的实用示例。

2024-08-11



# 安装Scrapy
pip install scrapy
 
# 创建一个Scrapy项目
scrapy startproject myproject
 
# 进入项目目录
cd myproject
 
# 创建一个Scrapy爬虫
scrapy genspider mydomain mydomain.com
 
# 运行爬虫
scrapy crawl mydomain

以上命令展示了如何安装Scrapy,创建一个新的Scrapy项目和爬虫,并运行这个爬虫。这是学习Scrapy的基本步骤,能帮助初学者快速了解Scrapy的使用。

2024-08-11

在Anaconda中更新当前环境的Python版本,可以使用conda命令。以下是更新到特定版本的Python的步骤:

  1. 打开终端(Mac/Linux)或Anaconda Prompt(Windows)。
  2. 激活你想要更新Python版本的环境。
  3. 使用conda install命令来更新Python版本。

例如,如果你想将Python更新到3.8版本,可以使用以下命令:




conda activate your_environment_name
conda install python=3.8

替换your_environment_name为你的环境名称。

如果你想保持所有依赖关系,并且只更新Python,可以添加--no-deps选项:




conda activate your_environment_name
conda install --no-deps python=3.8

请注意,更新Python版本可能会影响环境中其他包的兼容性,因此在更新后,确保测试你的应用程序以确保所有依赖项仍然工作。

2024-08-11

在Python中,有许多库可以用于不同的目的,例如数据科学,机器学习,网络爬虫等。下面是一些常见的Python库:

  1. NumPy:NumPy是Python的一个扩展库,主要用于处理大型多维数组和矩阵。它还提供了许多高级的数学函数来操作这些数组。
  2. Pandas:Pandas是一个强大的数据分析和操作的库。它提供了丰富的数据结构和操作这些数据结构的函数。
  3. Matplotlib:Matplotlib是Python的2D绘图库,它可以与NumPy结合使用,提供了一种数据可视化的方法。
  4. Seaborn:Seaborn是一个基于matplotlib的可视化库,专门为制作更加具有吸引力的图表而设计。
  5. Scikit-learn:Scikit-learn是一个Python库,提供了一系列的有监督和无监督学习算法。
  6. Requests:Requests是一个简单易用的HTTP库,用于发送HTTP请求。
  7. BeautifulSoup:BeautifulSoup是一个用于解析HTML和XML文件的库,可以用它来提取和操作网页中的数据。
  8. Scrapy:Scrapy是一个用于网络爬虫的开源和高效的Python库。
  9. TensorFlow:TensorFlow是一个用于数值计算的开源库,用于编写和执行机器学习算法。
  10. Keras:Keras是一个用Python编写的开源库,用于设计深度学习模型。

下面是安装这些库的代码:




pip install numpy pandas matplotlib seaborn requests beautifulsoup4 scrapy tensorflow keras

安装完这些库后,你就可以开始你的库之旅了。在接下来的代码中,我们将使用这些库来创建一些基本的可视化和网络爬虫。

例如,使用Matplotlib创建一个简单的折线图:




import matplotlib.pyplot as plt
import numpy as np
 
# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
 
# 绘制图像
plt.plot(x, y)
plt.show()

使用BeautifulSoup进行网页爬取:




import requests
from bs4 import BeautifulSoup
 
url = 'https://www.example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
 
# 提取所有的段落
paragraphs = soup.find_all('p')
for p in paragraphs:
    print(p.text)

使用Scrapy创建一个简单的网络爬虫:




import scrapy
 
class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['https://www.example.com']
 
    def parse(self, response):
        for href in response.css('a::attr(href)'):
            yield response.follow(href, self.parse)

这只是每个库的一小部分功能,每个库都有更多的特性和用法。你可以通过阅读它们的官方文档来了解更多。

2024-08-11

Tkinter是Python的标准GUI库。Tkinter的使用主要分为以下几个步骤:

  1. 导入Tkinter模块
  2. 创建GUI窗口
  3. 在窗口内添加组件
  4. 进入事件循环

以下是一个简单的Tkinter示例代码:




import tkinter as tk
 
# 创建一个窗口
window = tk.Tk()
 
# 给窗口设置标题
window.title("Hello Tkinter")
 
# 创建一个标签,并将其添加到窗口上
label = tk.Label(window, text="Hello, Tkinter!")
label.pack()
 
# 开始Tkinter的事件循环
window.mainloop()

在这个例子中,我们首先导入了tkinter模块,并创建了一个窗口。然后,我们创建了一个Label标签,并将其添加到窗口上。最后,我们调用了窗口的mainloop方法,这个方法会处理用户的交互操作,并更新GUI。

Tkinter提供了多种组件,如按钮(Button),文本框(Entry),标签(Label),画布(Canvas)等,可以用来创建各种各样的GUI界面。

以下是一个简单的登录窗口的例子:




import tkinter as tk
 
def login():
    username = entry_username.get()
    password = entry_password.get()
    if username == "admin" and password == "password":
        label_login_status.config(text="Login successful!", fg="green")
    else:
        label_login_status.config(text="Login failed!", fg="red")
 
window = tk.Tk()
window.title("Login")
 
label_username = tk.Label(window, text="Username:")
label_password = tk.Label(window, text="Password:")
label_username.pack()
label_password.pack()
 
entry_username = tk.Entry(window)
entry_password = tk.Entry(window, show="*")  # show="*" 表示密码字段
entry_username.pack()
entry_password.pack()
 
button_login = tk.Button(window, text="Login", command=login)
button_login.pack()
 
label_login_status = tk.Label(window, text="")
label_login_status.pack()
 
window.mainloop()

在这个例子中,我们创建了一个登录窗口,用户可以在其中输入用户名和密码。当用户点击登录按钮时,程序会检查输入的用户名和密码是否正确,并在登录状态标签中显示相应的信息。

Tkinter提供的组件和方法非常丰富,可以用来创建各种复杂的GUI应用程序。

2024-08-11



import tkinter as tk
 
def create_widgets(root):
    # 使用 Pack 布局管理器
    label1 = tk.Label(root, text='Pack 布局', font='Arial 12 bold')
    label1.pack(padx=10, pady=10)
 
    button1 = tk.Button(root, text='Button1')
    button1.pack(padx=10, pady=10)
 
    button2 = tk.Button(root, text='Button2')
    button2.pack(padx=10, pady=10)
 
    # 使用 Grid 布局管理器
    label2 = tk.Label(root, text='Grid 布局', font='Arial 12 bold')
    label2.grid(row=0, column=0, padx=10, pady=10)
 
    button3 = tk.Button(root, text='Button3')
    button3.grid(row=1, column=0, padx=10, pady=10)
 
    button4 = tk.Button(root, text='Button4')
    button4.grid(row=1, column=1, padx=10, pady=10)
 
    # 使用 Place 布局管理器
    label3 = tk.Label(root, text='Place 布局', font='Arial 12 bold')
    label3.place(x=150, y=200, anchor='nw')
 
    button5 = tk.Button(root, text='Button5')
    button5.place(x=250, y=220, anchor='nw')
 
    button6 = tk.Button(root, text='Button6')
    button6.place(x=350, y=220, anchor='ne')
 
 
root = tk.Tk()
root.title('布局管理器示例')
create_widgets(root)
root.mainloop()

这段代码展示了如何在Tkinter中使用Pack、Grid和Place三种布局管理器来排列界面上的控件。每一种布局管理器都有其特定的使用场景,例如Pack适合垂直或水平排列控件,Grid适合需要复杂行列布局的场景,而Place则提供了最为自由的控件定位方式。在实际应用中,开发者可以根据界面设计选择合适的布局管理器。

2024-08-11

爬虫是一种自动提取网页数据的程序,Python 是实现爬虫的常用语言之一。下面是六个常见的 Python 爬虫案例及其源代码。

  1. 使用requests和BeautifulSoup库爬取简单网页:



import requests
from bs4 import BeautifulSoup
 
url = 'http://example.com'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.prettify())
  1. 使用Scrapy框架爬取复杂网页:



import scrapy
 
class MySpider(scrapy.Spider):
    name = 'example'
    start_urls = ['http://example.com']
 
    def parse(self, response):
        for href in response.css('a::attr(href)'):
            yield response.follow(href, self.parse)
  1. 使用Selenium和PhantomJS进行JavaScript渲染的网页爬取:



from selenium import webdriver
 
driver = webdriver.PhantomJS()
driver.get('http://example.com')
print(driver.page_source)
driver.quit()
  1. 使用pymysql将爬取的数据存入MySQL数据库:



import pymysql
 
conn = pymysql.connect(host='localhost', user='user', password='passwd', db='db', charset='utf8')
cur = conn.cursor()
 
sql = "INSERT INTO example (column) VALUES (%s)"
cur.execute(sql, data)
 
conn.commit()
cur.close()
conn.close()
  1. 使用aiohttp异步库爬取网页(适合处理大量网页):



import aiohttp
 
async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()
 
async def main():
    async with aiohttp.ClientSession() as session:
        html = await fetch(session, 'http://example.com')
        print(html)
 
import asyncio
asyncio.get_event_loop().run_until_complete(main())
  1. 使用redis-py将爬虫队列和设置去重存储在Redis数据库:



import redis
from scrapy.utils.project import get_project_settings
 
settings = get_project_settings()
redis_key = settings['REDIS_ITEM_KEY']
 
redis_conn = redis.StrictRedis(host='localhost', port=6379, db=0)
 
def process_item(item):
    redis_conn.lpush(redis_key, item)
    return item

这些例子提供了不同的爬虫方法和技术,可以根据实际需求选择合适的方案。

2024-08-11

自动化抢票脚本通常涉及模拟登录、检测票务页面、识别验证码、自动下单等复杂操作。以下是一个简化的Python脚本框架,用于自动化抢票流程:




import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
 
# 用户自定义的登录信息和选择的演唱会信息
your_username = "your_username"
your_password = "your_password"
concert_id = "concert_id"  # 演唱会ID
 
# 初始化WebDriver
driver = webdriver.Chrome()
 
try:
    # 访问大麦网主页
    driver.get("https://www.damai.cn")
 
    # 模拟登录流程
    # 找到用户名和密码输入框,输入登录信息
    username_input = driver.find_element(By.ID, "loginName")
    password_input = driver.find_element(By.ID, "loginPassword")
    username_input.send_keys(your_username)
    password_input.send_keys(your_password)
    password_input.send_keys(Keys.RETURN)
 
    # 等待登录成功
    # ...
 
    # 访问门票页面
    driver.get(f"https://www.damai.cn/concert/buy.jsp?productId={concert_id}")
 
    # 检测是否有票,有的话进行下单流程
    # ...
 
    # 识别验证码
    # ...
 
    # 自动下单
    # ...
 
finally:
    # 关闭浏览器
    driver.quit()

注意:由于自动化抢票可能违反大麦网的使用条款,请勿用于非法目的。此代码只为教学展示自动化流程的基本框架,实际使用时需要完善各个环节的具体实现。

2024-08-11



import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class StreamExample {
    public static void main(String[] args) {
        List<String> items = Arrays.asList("Apple", "Banana", "Cherry", "Date", "Elderberry");
 
        // 使用Stream API过滤出长度大于5的字符串
        List<String> filteredItems = items.stream()
                                          .filter(s -> s.length() > 5)
                                          .collect(Collectors.toList());
 
        // 打印过滤后的结果
        filteredItems.forEach(System.out::println);
    }
}

这段代码演示了如何使用Java 8的流式API来过滤一个字符串列表,并只保留长度大于5的字符串。它首先将列表转换为流,应用过滤器,然后收集结果到新的列表中。最后,它打印出过滤后的字符串列表。这是一个简化代码并充分利用现代Java特性的例子。

2024-08-11



import pandas as pd
 
# 创建一个简单的DataFrame
data = {'Name': ['John', 'Anna', 'Peter', 'Linda'],
        'Age': [28, 23, 34, 29]}
df = pd.DataFrame(data)
 
# 打印DataFrame
print(df)
 
# 将DataFrame导出到CSV文件
df.to_csv('output.csv', index=False)
 
# 从CSV文件读取数据到新的DataFrame
df_from_csv = pd.read_csv('output.csv')
 
# 打印新的DataFrame
print(df_from_csv)

这段代码展示了如何使用pandas库创建一个简单的DataFrame,并将其导出为CSV文件,然后再从CSV文件读取数据到新的DataFrame。这个过程是数据处理和分析的常见步骤,pandas库提供了很好的支持。