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等语言编写爬虫代码,模拟加密过程并发送请求。

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

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
import re
 
# 视频下载函数
def download_video(url, filename):
    response = requests.get(url, stream=True)
    with open(filename, 'wb') as f:
        for chunk in response.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
    print(f"视频 {filename} 已保存。")
 
# 主函数
def main(url):
    res = requests.get(url)
    soup = BeautifulSoup(res.text, 'html.parser')
    video_tags = soup.find_all('source')
    video_urls =  for video in video_tags]
    video_urls = [re.sub(r'\\', '', url) for url in video_urls]  # 处理Windows路径问题
    for url in video_urls:
        filename = url.split('/')[-1]
        download_video(url, filename)
 
# 使用方法: 网页url
main('http://www.example.com/videos')

这段代码使用了requests库来发送HTTP请求,BeautifulSoup来解析HTML,以及re库来处理正则表达式。代码中的download_video函数负责实际下载视频,而main函数负责提取视频链接并调用download_video函数进行下载。使用时只需要将'http://www.example.com/videos'替换为目标网页的URL。

2024-08-23

为了使用Python和xxl-job构建爬虫系统,你需要遵循以下步骤:

  1. 安装xxl-job-executor-python



pip install xxl-job-executor-python
  1. 配置XXL-JOB调度中心。
  2. 创建Python脚本使用XXL-JOB执行器执行爬虫任务:



from xxl_job_executor import XxlJobExecutor
 
def my_spider_task(executor, job_params):
    # 这里编写你的爬虫代码
    print("正在运行爬虫任务...")
    # 爬虫代码...
    return "爬虫任务完成"
 
# 初始化XxlJobExecutor
executor = XxlJobExecutor()
# 注册任务处理器
executor.start_worker(job_handler="spiderJobHandler",
                      init_func=my_spider_task)
  1. 在XXL-JOB管理界面创建任务,指定执行器,并设置调度策略。
  2. 运行Python脚本启动爬虫任务执行器。

注意:这只是一个框架,你需要根据实际的爬虫需求来编写爬虫任务代码。此外,确保你的爬虫遵循网站的robots.txt规则,不进行对网站数据造成不良影响的爬取。

2024-08-23



import requests
import re
 
def login_to_tianyancha(username, password):
    # 登录接口URL
    login_url = 'https://passport.tianyancha.com/login'
    session = requests.session()
 
    # 获取登录时需要的加密参数
    result = session.get(login_url)
    execution = re.search('"execution":"(.*?)"', result.text).group(1)
    _event_id = re.search('_event_id:"(.*?)"', result.text).group(1)
 
    # 登录数据
    login_data = {
        'username': username,
        'password': password,
        'execution': execution,
        '_event_id': _event_id,
        'lt': ''
    }
 
    # 发送登录请求
    login_response = session.post(login_url, data=login_data)
 
    # 登录成功后,获取token
    token = re.search('"token":"(.*?)"', login_response.text).group(1)
    print(f'登录成功,获取到的token: {token}')
    return token, session
 
# 使用示例
username = 'your_username'
password = 'your_password'
token, session = login_to_tianyancha(username, password)

在这段代码中,我们首先定义了一个函数login_to_tianyancha,它接受用户名和密码作为参数,使用requests库来管理会话,并通过正则表达式解析登录页面中的关键参数。然后,我们构建登录数据并发送POST请求进行登录。登录成功后,我们再次使用正则表达式提取token。最后,我们返回token和包含登录状态的会话对象。

2024-08-23



import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
 
# 请求URL获取页面内容
def get_page(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)
    return response.text
 
# 解析页面数据
def parse_data(html):
    soup = BeautifulSoup(html, 'lxml')
    movie_list = soup.find_all('div', class_='info')
    for movie in movie_list:
        yield {
            '排名': movie.find('em').text,
            '电影名': movie.find('span', class_='title').text,
            '评分': movie.find('rating_num').text,
            '评分人数': movie.find('span', class_='rating_people').text[3:-3]
        }
 
# 保存数据到CSV
def save_to_csv(data, filename):
    df = pd.DataFrame(data)
    df.to_csv(filename + '.csv', index=False, encoding='utf-8-sig')
 
# 绘制电影评分的直方图
def plot_histogram(data):
    ratings = data['评分'].str.extract(r'(\d+\.?\d*)').astype('float')
    plt.hist(ratings, bins=25, color='lightblue', edgecolor='black')
    plt.xlabel('评分')
    plt.ylabel('电影数')
    plt.title('豆瓣电影评分直方图')
    plt.show()
 
# 主函数
def main():
    url = 'https://movie.douban.com/chart'
    html = get_page(url)
    movie_data = list(parse_data(html))
    save_to_csv(movie_data, 'douban_movies')
    plot_histogram(pd.DataFrame(movie_data))
 
if __name__ == '__main__':
    main()

这段代码实现了从豆瓣电影排行榜网页爬取数据,并将数据保存到CSV文件,最后使用matplotlib绘制电影评分的直方图。代码使用了requests库来发送HTTP请求,BeautifulSoup库来解析页面,pandas库来处理数据,以及matplotlib库来绘图。

2024-08-23



from drission.dr import *
from drission.web.chrome import *
from drission.web.auth_proxy import *
 
# 设置代理服务器
proxy_server = 'http://localhost:8010'
 
# 初始化DrissionPage
dr = DrissionPage(Chrome())
 
# 设置代理插件
dr.set_auth_proxy(AuthProxy(proxy_server))
 
# 设置代理认证信息
dr.auth_proxy.set_auth_info(
    user='your_username',
    password='your_password',
    domain='your_domain',
    host='your_proxy_host'
)
 
# 访问目标网站
dr.get('https://your_target_website.com')
 
# 执行数据采集操作
# ...
 
# 关闭浏览器
dr.close()

这段代码展示了如何使用DrissionPage和AuthProxy插件来配置和使用代理服务器进行数据采集。首先,我们设置了代理服务器的URL。然后,我们初始化了DrissionPage,并设置了代理插件。接着,我们设置了代理认证所需的用户名、密码、域、代理服务器地址。最后,我们使用DrissionPage访问了目标网站,并执行了数据采集操作。最终,我们关闭了浏览器以释放资源。

2024-08-23



import requests
from bs4 import BeautifulSoup
 
def crawl_lagou_jobs(position, city, page_num):
    """
    爬取拉勾网的职位信息
    :param position: 职位名称
    :param city: 城市名称
    :param page_num: 页数
    :return: 职位信息列表
    """
    jobs_info = []
    for i in range(1, page_num+1):
        url = f'https://www.lagou.com/jobs/list_%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E6%8A%80%E5%91%98?city={city}&district=&positionName={position}&first=true&kd=e1f8c6b136364c89977c5539f8b84833'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
        }
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, 'lxml')
            job_list = soup.find_all('div', class_='job-primary')
            for job in job_list:
                job_info = {
                    'company_name': job.find('div', class_='company-name').text,
                    'position_name': job.find('div', class_='name').text.strip(),
                    'salary': job.find('div', class_='money').text.strip(),
                    'work_year': job.find('div', class_='work-year').text.strip(),
                    'education': job.find('div', class_='eduBackground').text.strip(),
                    'city': job.find('div', class_='work-location').text.strip(),
                }
                jobs_info.append(job_info)
        else:
            print(f'请求失败,状态码:{response.status_code}')
    return jobs_info
 
# 使用示例
position = '机器学习工程师'
city = '北京'
page_num = 3
jobs_info = crawl_lagou_jobs(position, city, page_num)
for info in jobs_info:
    print(info)

这段代码定义了一个crawl_lagou_jobs函数,它接受职位名称、城市名称和页数作为参数,返回拉勾网上该职位的信息列表。这个简易的网络爬虫示例展示了如何使用Python进行网页爬取,并提取出有价值的数据。

2024-08-23

由于原始链接已经提供了完整的代码,我们只需要提取关键部分,以下是一个简化的代码实例,用于演示如何使用Python爬取西安工业大学OJ上的题目文档:




import requests
from bs4 import BeautifulSoup
 
# 西安工业大学OJ的网址
oj_url = "http://noj.xidian.edu.cn/"
 
# 使用requests获取网页内容
response = requests.get(oj_url)
 
# 检查请求是否成功
if response.status_code == 200:
    # 使用BeautifulSoup解析网页
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 假设题目列表在一个特定的<div>中,这里需要根据实际情况调整CSS选择器
    problem_div = soup.find('div', class_='problem-list')
    
    # 遍历所有的<a>标签,提取题目名称和链接
    for a_tag in problem_div.find_all('a'):
        problem_name = a_tag.text
        problem_link = oj_url + a_tag['href']
        print(f"题目名称: {problem_name}, 链接: {problem_link}")
        # 这里可以添加代码来下载题目文档
else:
    print("网页请求失败")

这段代码演示了如何使用requests和BeautifulSoup库来获取网页内容,并解析出需要的信息。在实际应用中,你可能需要处理登录验证、处理分页、处理复杂的DOM结构等问题,但基本的爬虫框架就是这样的。