2024-08-08



import requests
from bs4 import BeautifulSoup
import re
 
# 获取音频信息
def get_audio_info(audio_url):
    response = requests.get(audio_url)
    if response.status_code == 200:
        return response.json()
    return None
 
# 解析音频信息并打印
def print_audio_info(audio_info):
    if audio_info:
        audio_title = audio_info.get('title')
        audio_duration = audio_info.get('duration')
        print(f"标题: {audio_title}")
        print(f"时长: {audio_duration} 秒")
 
# 主函数
def main(audio_id):
    # 音频详情页URL
    audio_detail_url = f"https://www.ximalaya.com/revision/play/v1/audio?id={audio_id}"
    # 获取音频信息
    audio_info = get_audio_info(audio_detail_url)
    # 打印音频信息
    print_audio_info(audio_info)
 
# 音频ID
AUDIO_ID = 123456789  # 替换为实际的音频ID
# 运行主函数
main(AUDIO_ID)

这段代码首先定义了获取音频信息的函数get_audio_info和打印音频信息的函数print_audio_info。然后在main函数中通过拼接音频详情页URL来获取音频信息,并调用print_audio_info函数打印信息。最后,代码定义了一个音频ID变量AUDIO_ID,并调用main函数。这个简单的示例展示了如何使用Python进行网络爬取,并且包含了错误处理和对响应结果的解析。

2024-08-08



import requests
from bs4 import BeautifulSoup
import pandas as pd
 
# 请求URL,获取网页内容
def get_page_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_data(html):
    soup = BeautifulSoup(html, 'lxml')
    comments = soup.find_all('div', class_='comment')
    data = []
    for comment in comments:
        info = comment.find('div', class_='info')
        if info:
            user_name = info.find('a').text
            user_url = info.find('a')['href']
            habit_list = info.find_all('span', class_='user-habit')
            habit = ','.join([h.text for h in habit_list])
            data.append((user_name, user_url, habit))
    return data
 
# 保存数据到CSV文件
def save_to_csv(data, file_name):
    df = pd.DataFrame(data, columns=['用户名', '用户主页', '观影习惯'])
    df.to_csv(file_name, index=False, encoding='utf-8')
 
# 主函数
def main(url):
    html = get_page_content(url)
    if html:
        data = parse_data(html)
        save_to_csv(data, 'data.csv')
 
if __name__ == '__main__':
    url = 'https://movie.douban.com/subject/1292720/comments?status=P'
    main(url)

这段代码实现了从豆瓣网站爬取特定网页中用户评论的功能。首先定义了get_page_content函数来发送HTTP请求并获取网页内容,parse_data函数用于解析网页并提取用户名、用户主页以及观影习惯数据,最后save_to_csv函数将数据保存到CSV文件中。最后,main函数组织了整个流程。

2024-08-08



import requests
 
# 定义一个函数来发送HTTP请求
def send_request(method, url, **kwargs):
    try:
        if method == 'GET':
            response = requests.get(url, **kwargs)
        elif method == 'POST':
            response = requests.post(url, **kwargs)
        elif method == 'PUT':
            response = requests.put(url, **kwargs)
        elif method == 'DELETE':
            response = requests.delete(url, **kwargs)
        elif method == 'PATCH':
            response = requests.patch(url, **kwargs)
        else:
            raise ValueError('Unsupported HTTP method: ' + method)
        
        # 打印请求的URL和响应状态码
        print(f'{method} Request to {url} with status code: {response.status_code}')
        
        # 返回响应对象
        return response
    
    except requests.exceptions.RequestException as e:
        print(f'An error occurred: {e}')
        return None
 
# 使用示例
url = 'https://api.example.com/data'
response = send_request('GET', url)
 
# 打印响应文本
if response is not None:
    print(response.text)

这段代码定义了一个send_request函数,它接受一个HTTP方法和URL,以及任何需要传递给requests库的额外关键字参数。函数会根据传入的HTTP方法发送相应的请求,并打印出请求的URL和响应的状态码。如果请求成功,它还会返回响应对象;如果发生错误,它会捕获异常并返回None。这个简单的函数可以作为编写爬虫或者调用API接口的基础,提高代码的模块化程度和可读性。

2024-08-08



import requests
from bs4 import BeautifulSoup
 
def fetch_url(url):
    """
    发送HTTP请求,获取网页内容
    """
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except requests.exceptions.RequestException:
        return None
 
def parse_soup(soup):
    """
    解析BeautifulSoup对象,提取所需数据
    """
    # 示例:提取所有h1标签的内容
    h1_tags = soup.find_all('h1')
    return [tag.get_text() for tag in h1_tags]
 
def main():
    url = 'https://example.com'  # 替换为你想爬取的网站
    html_content = fetch_url(url)
    if html_content:
        soup = BeautifulSoup(html_content, 'html.parser')
        parsed_data = parse_soup(soup)
        for data in parsed_data:
            print(data)
    else:
        print('Failed to fetch URL')
 
if __name__ == '__main__':
    main()

这段代码展示了如何使用Python的requests库来获取网页内容,以及如何使用BeautifulSoup来解析HTML并提取数据。这是一个简单的网络爬虫示例,可以根据实际需求进行功能扩展。

2024-08-08



import pandas as pd
from jqdata import *
 
# 初始化函数,设定可交易日期等
def initialize(context):
    set_option('use_real_price', True)
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    set_benchmark('000300.XSHG')
    # 设定我们要分析的股票池
    g.security = '000001.XSHE'
 
# 每天开始时执行的函数
def handle_data(context, data):
    # 获取当前可用资金
    cash = context.portfolio.cash
    # 获取当前 security 的价格
    price = data[g.security].mavg(20, 'day')
    # 如果可以买入
    if cash > 10000:
        order_value(g.security, 10000 // price)
    # 如果股票持有量大于0,且当前价格低于20日均线,可以卖出
    if context.portfolio.positions[g.security].holding_quantity > 0 and price < data[g.security].mavg(20, 'day'):
        order_target(g.security, 0)
 
# 运行函数,初始化并运行回测
if __name__ == '__main__':
    run_backtest(initialize=initialize, handle_data=handle_data, start_date='2015-01-01', end_date='2020-01-01')

这个简易的例子展示了如何使用jqdata库来进行股票的价格平均线交易策略回测。在这个例子中,我们设定了一个基准股票池,并在每天开始时检查当前的可用资金和股票价格。如果可以购买并且当前资金大于10000,我们就买入股票。如果持有股票并且价格落到了20日线以下,我们就清空股票位置。这个例子简单明了,但是它展示了如何将实际的交易策略嵌入到一个自动化的回测环境中。

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



# 导入Django模型
from django.db import models
 
# 定义哈尔滨二手房数据模型
class HrljHouseData(models.Model):
    title = models.CharField(max_length=255, verbose_name="标题")
    size = models.CharField(max_length=50, verbose_name="面积")
    floor = models.CharField(max_length=50, verbose_name="楼层")
    direction = models.CharField(max_length=50, verbose_name="方向")
    year = models.CharField(max_length=50, verbose_name="年份")
    decorate = models.CharField(max_length=50, verbose_name="装修情况")
    house_type = models.CharField(max_length=50, verbose_name="房屋类型")
    address = models.CharField(max_length=255, verbose_name="地址")
    total_price = models.CharField(max_length=50, verbose_name="总价")
    unit_price = models.CharField(max_length=50, verbose_name="单价")
    publish_date = models.DateField(verbose_name="发布日期")
 
    class Meta:
        verbose_name = "哈尔滨二手房数据"
        verbose_name_plural = verbose_name
 
    def __str__(self):
        return f"{self.title} - {self.publish_date}"

这段代码定义了一个用于存储哈尔滨二手房数据的Django模型。它包含了标题、面积、楼层、方向、年份、装修情况、房屋类型、地址、总价和单价等字段,并有一个发布日期字段。代码示例中的字段和类名需要根据实际需求进行调整。这个模型可以用于数据库的创建和数据的存储。