2024-08-19



import requests
from lxml import etree
import csv
 
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
}
 
def get_html(url):
    """
    获取网页html内容
    :param url: 网页链接
    :return: 网页内容
    """
    response = requests.get(url, headers=headers)
    return response.text
 
def parse_html(html):
    """
    解析网页并提取招商信息
    :param html: 网页内容
    :return: 招商信息列表
    """
    html_element = etree.HTML(html)
    # 以下XPath表达式需要根据实际网页结构进行调整
    company_list = html_element.xpath('//div[@class="company-list"]/div')
    data_list = []
    for company in company_list:
        name = company.xpath('.//h3/a/text()')[0] if company.xpath('.//h3/a/text()') else '无'
        scale = company.xpath('.//p[@class="company-scale"]/text()')[0].strip() if company.xpath('.//p[@class="company-scale"]/text()') else '无'
        type = company.xpath('.//p[@class="company-type"]/a[1]/text()')[0].strip() if company.xpath('.//p[@class="company-type"]/a[1]/text()') else '无'
        area = company.xpath('.//p[@class="company-area"]/a/text()')[0].strip() if company.xpath('.//p[@class="company-area"]/a/text()') else '无'
        info = {
            '公司名称': name,
            '公司规模': scale,
            '企业类型': type,
            '所在地区': area
        }
        data_list.append(info)
    return data_list
 
def save_data(data_list):
    """
    将招商信息保存到CSV文件
    :param data_list: 招商信息列表
    """
    with open('recruit_info.csv', 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=data_list[0].keys())
        writer.writeheader()
        writer.writerows(data_list)
 
def main():
    """
    主函数,控制流程
    """
    url = 'https://www.zhipin.com/web/geek/home.html?utm_source=homepage&utm_medium=hao-channel&utm_oc=01'
    html = get_html(url)
    data_list = parse_html(html)
    save_data(data_list)
 
if __name__ == '__main__':
    main()

这段代码首先定义了请求头,用于模拟浏览器访问。然后定义了get_html函数来获取网页内容,parse_html函数来解析网页并提取招商信息,以及save_data函数来保存数据到CSV文件。最后,在main函数中控制流程的进行。

注意

2024-08-19



import requests
from bs4 import BeautifulSoup
 
# 定义一个简单的网络爬虫函数
def simple_crawler(url):
    # 发送HTTP请求
    response = requests.get(url)
    # 检查请求是否成功
    if response.status_code == 200:
        # 解析响应内容
        soup = BeautifulSoup(response.text, 'html.parser')
        # 打印页面标题
        print(soup.title.text)
    else:
        print(f"请求失败,状态码: {response.status_code}")
 
# 使用爬虫函数爬取一个网页
simple_crawler('https://www.example.com')

这段代码展示了如何使用Python的requests库和BeautifulSoup库来编写一个简单的网络爬虫。函数simple_crawler接收一个URL,向该URL发送HTTP请求,并且如果请求成功,使用BeautifulSoup解析页面内容,打印页面标题。如果请求失败,则打印状态码。这是学习网络爬虫的一个基本例子。

2024-08-19

由于原始代码较长,我们将提供核心函数的示例,这些函数用于创建一个简单的应用程序,该应用程序可以加载二手房源数据,进行简单的数据可视化,并在屏幕上显示结果。




import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
import pandas as pd
 
# 读取二手房源数据
df = pd.read_csv('data.csv')
 
# 创建Dash应用程序
app = dash.Dash(__name__)
 
# 定义布局
app.layout = html.Div([
    dcc.Graph(id='graph'),
    dcc.Dropdown(id='dropdown', options=[], value='')
])
 
# 回调函数:更新图表和下拉菜单选项
@app.callback(
    dash.dependencies.Output('graph', 'figure'),
    [dash.dependencies.Input('dropdown', 'value')])
def update_graph(selected_dropdown_value):
    # 根据下拉菜单的选择,选择相应的列进行绘图
    fig = px.scatter(df, x="X轴列名", y="Y轴列名", color="所需颜色分类的列名", title='图表标题')
    return fig
 
# 运行应用程序
if __name__ == '__main__':
    app.run_server(debug=True, use_reloader=False)

这个简单的Dash应用程序使用了Plotly Express来创建交互式的数据可视化图表。用户可以通过下拉菜单选择不同的列来更新图表。这个例子展示了如何结合Dash和Pandas进行数据分析和可视化,并且可以很容易地被扩展为更复杂的应用程序。

2024-08-19



import requests
from hashlib import md5
 
# 假设以下函数用于与打码平台交互
def get_captcha_result(captcha_id):
    # 这里应该是用于检查打码平台的验证结果的代码
    # 返回验证码的结果,例如 '123456'
    pass
 
def get_geetest_validate(geetest_challenge, geetest_validate, geetest_seccode):
    # 计算 geetest_seccode
    md5_obj = md5(
        (geetest_challenge + '&' + geetest_validate + '&' + 'private_key').encode('utf-8')
    )
    seccode_md5 = md5_obj.hexdigest()
    return seccode_md5
 
# 使用打码平台解决验证码
def crack_captcha(url, params, proxies, headers):
    response = requests.get(url, params=params, proxies=proxies, headers=headers)
    if response.status_code == 200:
        # 假设服务器返回的数据中有 'gt' 字段
        gt = response.json().get('gt')
        # 向打码平台发起请求获取验证码
        captcha_id = send_captcha_request(gt)
        # 等待验证码解析完成
        captcha_result = get_captcha_result(captcha_id)
        # 获取 geetest 验证码
        geetest_validate = get_geetest_validate(gt, captcha_result)
        # 更新请求参数
        params.update({'geetest_validate': geetest_validate})
        # 重新发起请求
        response = requests.get(url, params=params, proxies=proxies, headers=headers)
        return response
    return None
 
# 假设以下函数用于向打码平台发送验证请求
def send_captcha_request(gt):
    # 发送请求到打码平台,并返回任务ID
    # 例如 '1234567890'
    pass
 
# 使用示例
url = 'http://example.com/api'
params = {
    'key1': 'value1',
    'key2': 'value2'
}
proxies = {
    'http': 'http://user:pass@10.10.1.10:3128/',
    'https': 'http://user:pass@10.10.1.10:3128/'
}
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0'
}
response = crack_captcha(url, params, proxies, headers)
if response:
    print(response.text)

这个示例代码提供了一个函数 crack_captcha,它使用打码平台来解决验证码。首先,它发送一个GET请求到目标URL,然后使用打码平台返回的数据计算 geetest_validate,最后更新请求参数并重新发起请求。这个函数应该与实际的打码平台接口和验证逻辑一起使用。

2024-08-19

这个问题涉及到的是获取股票数据,一种常见的方法是使用Python的pandas\_datareader库来获取从Yahoo Finance等金融新闻网站获取股票数据。

pandas\_datareader可以从多个数据源获取金融数据,包括Yahoo Finance、Google Finance、Enigma等。

以下是一个简单的例子,展示如何使用pandas\_datareader获取A股代码为"sh.600000"的股票数据,即"平安银行"的A股数据。




import pandas_datareader.data as web
import datetime
 
start = datetime.datetime(2000, 1, 1)  # 设置起始日期
end = datetime.datetime(2021, 12, 31)  # 设置结束日期
 
# 获取平安银行(sh600000)的历史股票数据
data = web.DataReader("sh.600000", "yahoo", start, end)
 
print(data.tail())  # 打印最后几行数据

注意,这个代码需要联网运行,因为它会从Yahoo Finance等网站实时下载数据。

此外,pandas\_datareader只能获取到给定时间点的股票数据,如果需要获取实时数据,可能需要使用其他API或者库。

此代码只能获取到股票的历史数据,不包括实时数据。如果需要获取实时数据,可以考虑使用其他方法,如WebSocket连接或调用第三方API服务。

2024-08-19

在Python中使用代理IP进行网络爬虫可以通过几种方式实现,以下是四种常见的方法:

  1. 直接在请求方法中设置代理
  2. 使用requests库的Session对象
  3. 使用urllib库的ProxyHandler
  4. 使用第三方库例如httpx

以下是每种方法的示例代码:

  1. 直接在请求方法中设置代理



import requests
 
proxy = {'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:3128'}
requests.get('http://example.com', proxies=proxy)
  1. 使用requests库的Session对象



import requests
 
session = requests.Session()
session.proxies = {'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:3128'}
response = session.get('http://example.com')
  1. 使用urllib库的ProxyHandler



import urllib.request
 
proxy = urllib.request.ProxyHandler({'http': 'http://10.10.1.10:3128'})
opener = urllib.request.build_opener(proxy)
urllib.request.install_opener(opener)
response = urllib.request.urlopen('http://example.com')
  1. 使用httpx库



import httpx
 
proxies = {
    'http://example.com': 'http://10.10.1.10:3128',
    'https://example.com': 'http://10.10.1.10:3128'
}
 
with httpx.Client(proxies=proxies) as client:
    response = client.get('http://example.com')

以上代码展示了如何在Python中使用代理IP进行网络请求。选择哪种方法取决于你的具体需求和项目环境。通常情况下,如果你需要管理多个代理,或者想要在多个请求间保持会话(如cookie保持),使用Session对象是一个更好的选择。如果你的代码中只需要一个代理,并且不需要复杂的代理管理,直接在请求方法中设置代理可能是最简单的方法。

2024-08-19



import requests
from bs4 import BeautifulSoup
import pandas as pd
 
def get_ssq_data(url):
    res = requests.get(url)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text, 'html.parser')
    data_list = soup.select('#tdata > tr')
    ssq_data = [[item.text.strip() for item in data.select('td')] for data in data_list]
    return ssq_data
 
def save_to_csv(ssq_data, file_name):
    df = pd.DataFrame(ssq_data)
    df.to_csv(file_name, index=False)
 
def main():
    url = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html'
    ssq_data = get_ssq_data(url)
    save_to_csv(ssq_data, 'ssq_data.csv')
 
if __name__ == '__main__':
    main()

这段代码实现了从指定的网页抓取双色球开奖数据,并将其保存到CSV文件中。代码简洁,注重实现功能,不包含额外的错误处理。

2024-08-19

在Python中,global关键字用于指定变量是全局的,而nonlocal关键字用于指定变量是上一级非全局作用域中的。

  1. global关键字

当内部作用域想修改全局作用域的变量时,需要用到global关键字。




def func():
    global x
    x = 10
 
x = 5
func()
print(x)  # 输出10
  1. nonlocal关键字

当内部作用域想修改外部非全局作用域的变量时,需要用到nonlocal关键字。




def outer():
    x = 5
    def inner():
        nonlocal x
        x = 10
    inner()
    print(x)
 
outer()  # 输出10

注意:

  • 使用global关键字可以指定变量是全局的,但在内部作用域修改全局变量时,一般不推荐使用。
  • 使用nonlocal关键字可以指定变量是上一级非全局作用域的,如果上级作用域也没有这个变量,程序会报错。
2024-08-19

在Anaconda中修改Python版本通常涉及到创建一个新的环境或者更新已有环境中的Python版本。以下是如何在Anaconda中修改Python版本的步骤:

  1. 创建一个新的环境并指定Python版本:



conda create -n new_env_name python=3.x

这里new_env_name是你新环境的名字,3.x是你想要安装的Python版本。

  1. 激活新环境:



conda activate new_env_name
  1. 如果你想在现有环境中更新Python版本,首先激活环境:



conda activate existing_env_name

然后更新Python版本:




conda install python=3.x

请根据你的具体需求选择上述步骤中的一个或多个操作。记得在执行这些操作后,如果你在使用IDE或者文本编辑器,可能需要重新配置Python解释器路径以使用新的Python版本。

2024-08-19

报错解释:

这个错误表明在使用 pip 安装 Python 第三方包时,SSL 证书验证失败了。通常是因为你的网络环境需要通过代理服务器来访问外部网络,而代理服务器可能干扰了 SSL 证书的验证。

解决方法:

  1. 配置 pip 使用代理服务器。你需要设置 HTTPS_PROXYHTTP_PROXY 环境变量。

    对于 Linux 或 macOS,你可以在终端中运行以下命令:

    
    
    
    export HTTPS_PROXY="http://<代理服务器地址>:<端口号>"
    export HTTP_PROXY="http://<代理服务器地址>:<端口号>"

    对于 Windows,你可以在命令行中运行以下命令:

    
    
    
    set HTTPS_PROXY=http://<代理服务器地址>:<端口号>
    set HTTP_PROXY=http://<代理服务器地址>:<端口号>
  2. 如果你的代理服务器需要用户名和密码,你需要在代理 URL 中包含它们,例如:

    
    
    
    export HTTPS_PROXY="http://<用户名>:<密码>@<代理服务器地址>:<端口号>"
  3. 如果你不希望 pip 使用代理,但仍然需要解决 SSL 证书问题,可以尝试设置 pip 忽略 SSL 证书验证(不推荐,因为这会降低安全性):

    
    
    
    pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <包名>
  4. 确保你的代理服务器允许你访问外部 Python 包索引服务(如 pypi.org)。
  5. 如果你使用的是特定的代理软件(如 Nginx、Squid),确保它配置正确并且支持 pip 的代理请求。
  6. 如果你在公司网络或其他安全环境下,请确保遵守相关的网络策略和安全规范。

以上步骤应该能解决大多数因代理服务器引起的 SSL 证书错误问题。如果问题依旧,请检查代理服务器设置和网络连接。