2024-08-08



import requests
from lxml import etree
import csv
 
def get_content(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.text
    return None
 
def parse_content(html):
    html = etree.HTML(html)
    job_list = html.xpath('//ul[@class="item_con_list"]/li')
    for job in job_list:
        job_title = job.xpath('./div[1]/h3/a/@title')[0]
        job_link = job.xpath('./div[1]/h3/a/@href')[0]
        job_company = job.xpath('./div[2]/div[1]/a[1]/text()')[0]
        job_location = job.xpath('./div[2]/div[1]/span[1]/text()')[0]
        job_salary = job.xpath('./div[2]/div[2]/div[1]/text()')[0]
        job_info = job.xpath('./div[2]/div[2]/div[2]/p/text()')[0]
        job_info = job_info.strip().replace('\n', '').replace(' ', '')
        yield {
            'title': job_title,
            'link': job_link,
            'company': job_company,
            'location': job_location,
            'salary': job_salary,
            'info': job_info
        }
 
def save_to_csv(data):
    with open('58_jobs.csv', 'a', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=['title', 'link', 'company', 'location', 'salary', 'info'])
        writer.writerow(data)
 
def main(offset):
    url = f'https://www.58.com/jobs/?&cl=1&cityId=489&offset={offset}'
    html = get_content(url)
    for job in parse_content(html):
        print(job)
        save_to_csv(job)
 
if __name__ == '__main__':
    for i in range(0, 30, 30):  # 分页参数,这里只抓取3页的数据,实际可以根据需要抓取更多
        main(i)

这段代码实现了58同城招聘信息的爬取,并将抓取的数据保存到CSV文件中。代码中使用了requests库来发送HTTP请求,使用lxml库来解析HTML内容,并通过XPath表达式来提取特定的元素。数据爬取的过程被封装在parse_content函数中,该函数返回一个生成器,它能够高效地生成每一个职位的信息,并通过save_to_csv函数保存到CSV文件中。最后,在main函数中通过一个循环来迭代不同的分页,完成对多页数据的爬取。

2024-08-08



import requests
from bs4 import BeautifulSoup
import pandas as pd
 
# 设置请求头信息,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
 
def get_price_history(url):
    # 发送GET请求
    response = requests.get(url, headers=headers)
    # 解析网页
    soup = BeautifulSoup(response.text, 'lxml')
    # 找到价格历史数据所在的表格
    table = soup.find('table', class_='tb_list')
    # 提取表格中的数据
    rows = table.find_all('tr')[1:]  # 跳过表头
    data = [[td.text.strip() for td in row.find_all('td')] for row in rows]
    # 将数据转换为DataFrame
    df = pd.DataFrame(data, columns=['日期', '价格', '销售商'])
    return df
 
# 示例URL
url = 'https://www.hh360.com/product/293460.html'
# 获取价格历史数据
price_history = get_price_history(url)
print(price_history)

这段代码首先导入了必要的模块,设置了请求头信息,定义了一个函数get_price_history来获取商品的价格历史。然后发送GET请求,解析网页,提取出价格历史数据,并将其转换为pandasDataFrame格式,最后打印出价格历史数据。这个例子展示了如何使用Python进行网页数据抓取,并处理数据以供分析使用。

2024-08-08



import requests
 
# 要上传的文件路径
file_path = '/path/to/your/file.txt'
 
# API的URL
url = 'http://example.com/api/upload'
 
# 使用with打开文件,这样可以确保文件在上传后被正确关闭
with open(file_path, 'rb') as file:
    # 使用requests.post发送文件
    response = requests.post(url, files={'file': file})
 
# 检查请求是否成功
if response.status_code == 200:
    print('文件上传成功')
else:
    print('文件上传失败')

这段代码演示了如何使用Python的requests库来上传文件。在上传文件时,我们使用了requests提供的files参数,它允许你指定一个字典,字典的key为表单中字段的名称,value为文件对象或者文件的路径。这种方法适用于发送multipart/form-data类型的POST请求。

2024-08-08



import requests
from bs4 import BeautifulSoup
import re
import os
 
def download_image(image_url, directory):
    """
    下载图片到指定目录
    """
    response = requests.get(image_url)
    image_name = image_url.split('/')[-1]
    with open(os.path.join(directory, image_name), 'wb') as file:
        file.write(response.content)
 
def crawl_images(url, directory):
    """
    爬取指定网页中的图片链接,并下载到本地目录
    """
    if not os.path.exists(directory):
        os.makedirs(directory)
 
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    image_urls = [image['src'] for image in soup.find_all('img') if re.match(r'http[s]?://', image['src'])]
 
    for image_url in image_urls:
        print(f"Downloading image: {image_url}")
        download_image(image_url, directory)
 
if __name__ == '__main__':
    base_url = 'http://example.webscraping.com/places/default/view/Afghanistan-1'
    directory = 'images'
    crawl_images(base_url, directory)

这段代码实现了一个简单的网络爬虫,用于下载特定网页上的所有图片。首先,定义了一个下载图片的函数download_image,它接受图片链接和保存目录作为参数,然后使用requests库获取图片内容,并将其写入到指定目录。

其次,定义了一个爬取图片的函数crawl_images,它接受网页链接和保存目录作为参数,调用requests获取网页内容,使用BeautifulSoup解析网页,并通过正则表达式筛选出完整的图片链接。然后遍历这些链接,调用download_image函数进行下载。

最后,在if __name__ == '__main__':块中,设置了基础网页链接和图片保存目录,并调用crawl_images函数开始爬取过程。

2024-08-08

在PHP中,使用cURL函数配置代理IP很简单。以下是一个示例代码,展示了如何设置cURL选项以使用代理服务器:




<?php
// 初始化cURL会话
$ch = curl_init();
 
// 设置要访问的URL
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
 
// 设置代理服务器
curl_setopt($ch, CURLOPT_PROXY, "http://your-proxy-ip:port");
 
// 如果需要,设置代理认证
// curl_setopt($ch, CURLOPT_PROXYUSERPWD, "username:password");
 
// 执行cURL会话
$result = curl_exec($ch);
 
// 关闭cURL会话
curl_close($ch);
?>

确保替换your-proxy-ipport为你的代理服务器的IP地址和端口号。如果代理服务器需要认证,则可以使用CURLOPT_PROXYUSERPWD选项来提供用户名和密码。

2024-08-08



import subprocess
import json
 
# 执行命令并获取输出
def execute_command(command):
    # 使用subprocess.run来执行命令
    result = subprocess.run(command, capture_output=True, text=True, shell=True)
    
    # 如果命令执行成功
    if result.returncode == 0:
        # 尝试解析JSON输出
        try:
            json_output = json.loads(result.stdout)
            return json_output
        except json.JSONDecodeError:
            # JSON解析失败,返回原始输出
            return result.stdout
    else:
        # 命令执行失败,返回错误信息
        return result.stderr
 
# 示例命令
command = "echo '{\"key\": \"value\"}'"
 
# 执行命令
output = execute_command(command)
 
# 打印结果
print(output)

这段代码使用subprocess.run来执行一个命令,并且尝试将输出解析为JSON。如果解析成功,则返回解析后的JSON对象;如果解析失败,则返回原始输出。错误处理包括当命令执行失败时返回错误信息。

2024-08-08



import os
from transformers import AutoModel, LoRAModel
 
def load_lora_checkpoints(model_name_or_path, num_lora_parts):
    """
    加载多个LoRA分区模型。
    """
    lora_checkpoints = []
    for part in range(num_lora_parts):
        lora_path = f"{model_name_or_path}-lora-{part}"
        lora_model = LoRAModel.from_pretrained(lora_path)
        lora_checkpoints.append(lora_model)
    return lora_checkpoints
 
def switch_lora_part(lora_checkpoints, part_to_use):
    """
    切换到指定的LoRA分区。
    """
    # 确保分区索引在范围内
    assert 0 <= part_to_use < len(lora_checkpoints), "分区索引超出范围"
    # 将模型加载到CPU(如果当前在GPU上)并禁用梯度计算
    model = lora_checkpoints[part_to_use].cpu().eval()
    return model
 
# 示例使用
model_name_or_path = "distilbert-base-uncased"
num_lora_parts = 4
 
# 加载多个LoRA分区
lora_checkpoints = load_lora_checkpoints(model_name_or_path, num_lora_parts)
 
# 切换到第2个LoRA分区
part_to_use = 2
model = switch_lora_part(lora_checkpoints, part_to_use)
 
# 使用model进行推理或其他操作...

这段代码展示了如何加载多个LoRA分区模型并切换到指定的分区。首先定义了加载LoRA分区的函数,然后定义了切换到特定LoRA分区的函数。最后,给出了如何使用这些函数的示例。这个例子简洁明了,并且注重于教学和实用性。

2024-08-08

要在没有网络连接的情况下使用pip离线安装Python包,你需要在有网络连接的机器上下载包及其依赖,然后将它们传输到目标机器上进行安装。以下是步骤和示例代码:

  1. 在有网络的机器上,使用pip下载包及其依赖:



pip download -d /path/to/downloaded-packages some_package

这将下载some_package及其所有依赖到指定的目录。

  1. 将下载的包的目录/path/to/downloaded-packages整个传输到离线的Python环境中的机器上。
  2. 在离线机器上,使用pip从本地目录安装包:



pip install --no-index --find-links=/path/to/downloaded-packages some_package

这将从本地目录/path/to/downloaded-packages安装some_package,而不是从在线仓库下载。

确保在离线机器上的目录/path/to/downloaded-packages对pip可读。如果需要,可以将这个目录压缩成一个归档文件,然后通过USB驱动器或其他媒介传输到离线机器上。

2024-08-08

该命令是在Python 3.x中用于启动一个简单的HTTP服务器的。它会在当前目录下启动一个HTTP服务器,并且会默认监听8000端口。

如果你想要改变服务器监听的端口,可以在命令后面加上端口号。例如,如果你想让服务器监听8080端口,你可以使用以下命令:




python -m http.server 8080

如果你想要在一个特定的IP地址上启动服务器,你可以在命令后面加上IP地址。例如,如果你想让服务器在地址192.168.1.10上监听8080端口,你可以使用以下命令:




python -m http.server 8080 192.168.1.10

注意:在使用这个命令时,你需要确保你的计算机上的8000端口或者你指定的端口没有被其他程序占用。

另外,如果你想要在某个特定的目录下启动服务器,你可以在命令后面加上目录路径。例如,如果你想在/home/user/documents目录下启动服务器,你可以使用以下命令:




python -m http.server 8000 /home/user/documents

这些就是python -m http.server命令的基本用法。

2024-08-08



# Python入门基础知识的摘要和代码示例
 
# 1. 打印文本到控制台
print("Hello, World!")
 
# 2. 变量和数据类型
# 整数
int_number = 10
print(int_number)
# 浮点数
float_number = 3.14
print(float_number)
# 字符串
str_text = "Hello Python!"
print(str_text)
# 布尔值
bool_value = True
print(bool_value)
 
# 3. 运算符和表达式
num1 = 5
num2 = 3
sum_result = num1 + num2
print(sum_result)  # 8
 
# 4. 控制流程 - 条件语句
age = 18
if age >= 18:
    print("You are old enough to vote!")
else:
    print("Sorry, you are too young to vote.")
 
# 5. 控制流程 - 循环
for i in range(5):  # 从0到4
    print(i)
 
# 6. 函数定义和使用
def greet(name):
    print(f"Hello, {name}!")
 
greet("Alice")  # 输出: Hello, Alice!
 
# 7. 列表和字典
# 列表
fruits = ["apple", "banana", "cherry"]
print(fruits)
# 字典
person = {"name": "Bob", "age": 25}
print(person)
 
# 8. 异常处理
try:
    num = int("not_a_number")
except ValueError:
    print("Invalid input, expected a number.")
 
# 9. 类和对象
class Car:
    def __init__(self, make, model):
        self.make = make
        self.model = model
 
    def describe_car(self):
        print(f"This car is a {self.make} {self.model}.")
 
my_car = Car("Toyota", "Corolla")
my_car.describe_car()  # 输出: This car is a Toyota Corolla.

这段代码展示了Python的基础知识,包括变量、数据类型、运算符、控制流程、函数、列表、字典、异常处理、类和对象。每一部分都包含了简单的代码示例来帮助初学者理解和掌握这些基础概念。