2024-08-23



import requests
import json
from datetime import datetime
import matplotlib.pyplot as plt
 
# 定义函数获取比特币实时价格
def get_btc_price():
    url = 'https://api.coindesk.com/v1/bpi/currentprice.json'
    response = requests.get(url)
    if response.status_code == 200:
        return response.json()['bpi']['USD']['rate_float']
    else:
        return "Error fetching data"
 
# 定义函数获取比特币历史价格
def get_btc_history_price(days):
    url = 'https://api.coindesk.com/v1/bpi/historical/close.json'
    response = requests.get(f'{url}?start=0&end={days}d')
    if response.status_code == 200:
        return response.json()['bpi']
    else:
        return "Error fetching data"
 
# 获取比特币实时价格
current_price = get_btc_price()
print(f"比特币当前价格(美元): {current_price}")
 
# 获取过去一周的比特币价格
past_seven_days_prices = get_btc_history_price(7)
 
# 绘制价格走势图
dates, prices = zip(*past_seven_days_prices.items())
plt.plot(dates, prices)
plt.xlabel('Date')
plt.ylabel('Price ($)')
plt.title('Bitcoin Price Trend (Past 7 Days)')
plt.xticks(rotation=45)
plt.show()

这段代码首先定义了两个函数get_btc_priceget_btc_history_price,分别用于获取比特币的实时价格和过去一段时间的价格。然后,分别调用这两个函数,并打印出结果。最后,使用matplotlib绘制了价格走势图,并展示出来。这个例子简单直观地展示了如何使用requests库获取API数据,以及如何使用matplotlib进行数据可视化。

2024-08-23

在爬虫中,常见的伪加密方式有Base64和MD5。Base64是一种简单的加密方式,可以用来加密数据,但是它很容易被解密。MD5是一种散列函数,主要用于生成消息摘要,它是不可逆的,主要用于验证数据的完整性。

以下是Python中这些加密方式的实现:

  1. Base64加密:

Python的内置库base64提供了Base64的编码和解码功能。




import base64
 
# 编码
encoded_data = base64.b64encode(b"Hello World")
print(encoded_data)  # 输出:b'SGVsbG8gV29ybGQ='
 
# 解码
decoded_data = base64.b64decode(b'SGVsbG8gV29ybGQ=')
print(decoded_data)  # 输出:b'Hello World'
  1. MD5加密:

Python的hashlib库提供了MD5加密功能。




import hashlib
 
# 加密
md5_data = hashlib.md5(b"Hello World").hexdigest()
print(md5_data)  # 输出:'b10a8db164e0754105b7a99be72e3fe5'

需要注意的是,MD5加密后的结果是一个128位的散列值,不可逆。

  1. DES加密:



from Crypto.Cipher import DES
from binascii import b2a_hex, a2b_hex
 
key = b'ABCDEFGHIJKLMNOP'
 
def des_encrypt(data):
    data = data.encode('utf-8')
    mod = DES.new(key, DES.MODE_ECB)
    return b2a_hex(mod.encrypt(data))
 
def des_decrypt(data):
    mod = DES.new(key, DES.MODE_ECB)
    return mod.decrypt(a2b_hex(data)).decode('utf-8')
 
encrypted_data = des_encrypt(b"Hello World")
print(encrypted_data)  # 输出加密数据
 
decrypted_data = des_decrypt(encrypted_data)
print(decrypted_data)  # 输出解密数据
  1. AES加密:



from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
from Crypto.Random import get_random_bytes
 
key = get_random_bytes(16)
 
def aes_encrypt(data):
    data = data.encode('utf-8')
    aes = AES.new(key, AES.MODE_EAX)
    ciphertext, tag = aes.encrypt_and_digest(data)
    return b2a_hex(aes.nonce), b2a_hex(tag), b2a_hex(ciphertext)
 
def aes_decrypt(nonce, tag, ciphertext):
    aes = AES.new(key, AES.MODE_EAX, nonce=nonce)
    return aes.decrypt_and_verify(a2b_hex(ciphertext), a2b_hex(tag)).decode('utf-8')
 
encrypted_data = aes_encrypt(b"Hello World")
print(encrypted_data)  # 输出加密数据
 
decrypted_data = aes_decrypt(*encrypted_data)
print(decrypted_data)  # 输出解密数据
  1. RSA加密:



from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
from binascii import b2a_hex, a2b_hex
 
rsa = RSA.
2024-08-23



import requests
from bs4 import BeautifulSoup
 
def crawl_sogou(keyword, num_pages):
    for i in range(num_pages):
        page_number = i * 10
        url = f'https://www.sogou.com/web?query={keyword}&ie=utf8&start={page_number}'
        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:
            soup = BeautifulSoup(response.text, 'lxml')
            for result in soup.find_all('a', {'href': True, 'class': 'txt-link'}):
                link = result['href']
                title = result.text.strip()
                print(f'标题: {title}, 链接: {link}')
 
if __name__ == '__main__':
    keyword = 'Python'
    num_pages = 3
    crawl_sogou(keyword, num_pages)

这段代码使用了requests库来发送HTTP请求,并使用BeautifulSoup库来解析返回的HTML内容。代码定义了一个crawl_sogou函数,该函数接受搜索词和需要爬取的页面数量,然后循环访问每一个页面,提取出页面中的链接和标题,并打印出来。这个例子展示了如何使用Python进行基本的网络爬虫。

2024-08-23



import requests
 
def fetch_website_data(url):
    """
    使用requests库获取网页数据
    :param url: 网页的URL
    :return: 网页内容
    """
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        else:
            return "Failed to retrieve data. Server replied with: {}".format(response.status_code)
    except requests.exceptions.RequestException as e:
        return "An error occurred: {}".format(e)
 
# 示例用法
url = "https://www.example.com"
data = fetch_website_data(url)
print(data)

这段代码定义了一个名为fetch_website_data的函数,它接受一个URL作为参数,使用requests.get方法来获取网页内容。如果请求成功,它返回网页的文本内容;如果请求失败,它返回错误信息。在实际使用中,你需要替换"https://www.example.com"为你想要爬取的网页的URL。

2024-08-23



import requests
from bs4 import BeautifulSoup
 
# 设置请求头,模拟浏览器访问
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_html(url):
    """
    获取网页HTML内容
    :param url: 网页URL
    :return: HTML内容
    """
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except requests.RequestException:
        return None
 
def parse_html(html):
    """
    解析HTML内容
    :param html: HTML内容
    :return: 解析后的数据
    """
    soup = BeautifulSoup(html, 'html.parser')
    # 解析soup中的数据,提取需要的信息
    # 例如提取所有的段落
    paragraphs = soup.find_all('p')
    return paragraphs
 
def main():
    url = 'http://example.com'  # 替换为目标网页URL
    html = get_html(url)
    if html:
        paragraphs = parse_html(html)
        for p in paragraphs:
            print(p.get_text())
    else:
        print('Failed to retrieve the webpage')
 
if __name__ == '__main__':
    main()

这段代码展示了如何使用Python的requests库来获取网页内容,以及如何使用Beautiful Soup来解析HTML内容。代码中的get_html函数负责获取网页的HTML内容,parse_html函数负责解析HTML内容,并提取需要的数据。main函数则是程序的入口点,负责调用其他函数并处理逻辑流程。

2024-08-23



import requests
 
def login_to_website(username, password):
    """使用 Session 对象模拟用户登录"""
    # 创建一个 Session 对象
    session = requests.Session()
 
    # 登录的 URL
    login_url = 'http://example.com/login'
 
    # 用户输入的登录信息
    login_data = {
        'username': username,
        'password': password,
        # 如果需要,还可以包含其他登录所需的数据
    }
 
    # 发送登录请求
    response = session.post(login_url, data=login_data)
 
    # 检查是否登录成功
    if response.ok:
        print('登录成功')
        # 登录成功后,session 对象会保存会话信息,之后可以用它来发送需要登录才能访问的请求
        return session
    else:
        print('登录失败')
        return None
 
# 用户的登录信息
username = 'your_username'
password = 'your_password'
 
# 获取登录后的 Session 对象
session = login_to_website(username, password)
 
# 如果登录成功,可以用 session 对象来发送后续的请求
if session:
    # 示例:获取登录后的用户信息
    user_info_url = 'http://example.com/userinfo'
    response = session.get(user_info_url)
    if response.ok:
        print('用户信息:', response.text)
    else:
        print('获取用户信息失败')

这段代码首先定义了一个函数login_to_website,它接受用户名和密码作为参数,使用requests.Session()创建一个Session对象,然后发送一个POST请求来尝试登录。登录成功后,会返回这个Session对象,之后可以用这个对象来发送需要登录的请求。在实际使用中,需要替换登录URL和登录所需的数据以适应特定的网站。

2024-08-23



import requests
 
# 目标URL
url = 'https://www.example.com'
 
# 发送HTTP GET请求
response = requests.get(url)
 
# 检查请求是否成功
if response.status_code == 200:
    print("请求成功")
    # 打印响应内容(网页的HTML)
    print(response.text)
else:
    print("请求失败")
 
# 注意:实际应用中应该处理异常和响应的解析

这段代码使用Python的requests库向指定的URL发送一个HTTP GET请求,并打印出响应内容。它演示了如何使用requests库的基本方法来进行简单的网络爬取。在实际应用中,你可能需要对响应进行解析、处理异常,以及可能需要添加请求头、处理cookies等。

2024-08-23



import requests
from lxml import etree
 
def get_data(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',
        'Accept-Encoding': 'gzip, deflate, br',
    }
    res = requests.get(url, headers=headers)
    res.raise_for_status()
    res.encoding = 'utf-8'
    return res.text
 
def parse_data(html):
    html = etree.HTML(html)
    # 使用XPath表达式提取数据
    titles = html.xpath('//h2[@class="post-title"]/a/text()')
    links = html.xpath('//h2[@class="post-title"]/a/@href')
    return list(zip(titles, links))
 
def main():
    url = "https://www.cnblogs.com/#p"
    html = get_data(url)
    data = parse_data(html)
    for title, link in data:
        print(f"标题: {title}, 链接: {link}")
 
if __name__ == "__main__":
    main()

这段代码实现了一个简单的网络爬虫,它从博客园的首页提取文章标题和链接。首先定义了get_data函数来发送HTTP请求,获取网页内容;然后定义了parse_data函数使用XPath解析HTML内容;最后在main函数中调用这两个函数,并打印结果。这个例子展示了如何使用requests库获取网页内容以及如何使用lxml.etree模块和XPath解析HTML结构的数据。

2024-08-23

requests.get 是 Python 的 requests 库中用于发送 HTTP GET 请求的函数。该函数可以接收多个参数,以下是一些常用参数:

  1. url:(必需)要访问的网址。
  2. params:(可选)字典或字节序列,作为参数添加到 URL 中。
  3. headers:(可选)字典,HTTP 请求头部。
  4. cookies:(可选)字典或 CookieJar 对象,要发送的 Cookie
  5. auth:(可选)元组,支持 HTTP 认证功能的用户名和密码。
  6. timeout:(可选)设定超时时间(秒)。

以下是一个使用 requests.get 的简单例子:




import requests
 
url = 'http://httpbin.org/get'
params = {'key1': 'value1', 'key2': 'value2'}
headers = {'User-Agent': 'My User Agent 1.0'}
 
response = requests.get(url, params=params, headers=headers)
 
print(response.text)

在这个例子中,我们向 httpbin.org/get 发送了一个 GET 请求,并附带了两个查询参数 key1key2,同时设置了一个自定义的 User-Agent 请求头。

2024-08-23

由于原始链接已经被打上了反爬标签,我无法提供确切的代码实现。但是,我可以给出一个通用的爬虫逆向和解密的框架。

  1. 分析网络请求:使用浏览器的开发者工具或者专业的抓包工具(如Wireshark)来查看网络请求。观察请求的URL、方法、头部、cookies和数据。
  2. 识别加密参数:通常,加密的数据会出现在POST请求的数据部分。观察加密的字段和使用的加密算法。
  3. 逆向加密算法:如果是AES或DES等对称加密算法,可以尝试破解密钥。如果是非对称加密或者加密参数中包含随机性,可能需要通过代码分析来找到解密逻辑。
  4. 动态调试:使用调试器或者在代码中加入调试代码来跟踪加密的具体实现。
  5. 编写爬虫代码:根据分析结果,使用Python等语言编写爬虫代码,模拟加密过程并发送请求。

由于具体的代码实现依赖于网站的加密逻辑和反爬措施的复杂程度,这里不提供具体代码。如果有具体的网站或者需要帮助进行代码实现,可以提供详细的网站链接以供分析和帮助。