2024-08-19



from fake_useragent import UserAgent
 
def get_random_user_agent():
    return UserAgent().random
 
# 使用函数获取随机的User-Agent
print(get_random_user_agent())

这段代码演示了如何使用fake_useragent库来生成一个随机的User-Agent。首先,我们导入了UserAgent类,然后定义了一个函数get_random_user_agent,该函数返回一个新的随机生成的User-Agent字符串。最后,我们打印出一个随机生成的User-Agent。这个例子简单明了地展示了如何使用这个库来满足爬虫项目中需要伪装请求身份的需求。

2024-08-19

以下是一个简化的JavaScript函数,用于模拟淘宝登录时的加密过程,生成sign值。这个例子只是为了说明如何逆向解析JavaScript加密函数,实际的加密方法可能复杂得多。




function getSign(params) {
    // 假设的加密函数,实际情况可能不同
    return params.sort().join('') + 'secret_key'; // 加上密钥进行加密
}
 
// 使用方法
var params = {
    'key1': 'value1',
    'key2': 'value2',
    // ...
};
 
var sign = getSign(Object.keys(params).sort());
console.log(sign); // 输出加密后的sign

这个函数只是为了演示如何生成一个假设的sign值。在实际的淘宝API中,sign很可能是通过更复杂的算法生成的,可能包括多种编码、加密和散列函数。需要具体的加密逻辑才能正确地生成sign值进行API请求。

2024-08-19



from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
 
# 配置Selenium WebDriver
driver_path = 'chromedriver的路径'
url = '你要爬取的网站'
 
driver = webdriver.Chrome(executable_path=driver_path)
wait = WebDriverWait(driver, 20)
 
def login(username, password):
    # 登录页面的处理逻辑
    pass
 
def crawl_data():
    # 进入需要爬取数据的页面
    driver.get(url)
    
    # 这里添加页面加载等待,确保页面元素加载完成
    wait.until(EC.presence_of_element_located((By.ID, 'some_element_id')))
    
    # 开始爬取数据
    # 假设数据在table中,通过xpath定位到table
    table = driver.find_element_by_xpath('//*[@id="table_id"]')
    rows = table.find_elements_by_tag_name('tr')
    
    for row in rows:
        # 提取每一行的数据,这里根据实际情况来
        data = row.text
        print(data)
        # 保存数据到文件或数据库
 
def main():
    # 登录操作,根据实际情况进行修改
    login('your_username', 'your_password')
    
    # 开始爬取数据
    crawl_data()
 
if __name__ == "__main__":
    main()
    # 关闭浏览器
    driver.quit()

这个代码实例展示了如何使用Selenium和Python实现一个简单的定时任务网页爬虫。在这个例子中,我们首先配置了Selenium WebDriver,然后定义了一个登录函数,用于模拟登录操作。接着定义了一个爬取数据的函数,该函数会打开一个网页,等待页面加载,然后提取需要的数据。最后,在main函数中调用登录和爬取数据的函数,并在完成后关闭浏览器。这个例子提供了一个基本框架,可以根据实际需求进行扩展和修改。

2024-08-19



import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
 
# 爬取数据
def crawl_data(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    data = soup.find_all('div', class_='price')
    prices = [int(item.text.strip()[1:]) for item in data]
    return prices
 
# 数据可视化
def visualize_data(data):
    plt.hist(data, bins=50)
    plt.title('酒店价格分布')
    plt.xlabel('价格(人民币)')
    plt.ylabel('酒店数量')
    plt.show()
 
# 数据分析和报告
def analyze_data(data):
    mean_price = pd.Series(data).mean()
    median_price = pd.Series(data).median()
    mode_price = pd.Series(data).mode()[0]
    print(f'平均价格: {mean_price}')
    print(f'中位数价格: {median_price}')
    print(f'最常见价格: {mode_price}')
 
# 主函数
def main():
    url = 'https://www.example.com/hotels'
    prices = crawl_data(url)
    analyze_data(prices)
    visualize_data(prices)
 
if __name__ == '__main__':
    main()

这个代码实例展示了如何使用Python爬取数据、进行简单的数据分析、可视化分析结果,并且提供了一个模拟的网络爬虫URL。实际应用中,你需要替换为正确的URL和相应的数据解析方法。

2024-08-19



import requests
from bs4 import BeautifulSoup
import re
import datetime
 
def get_baidu_hot_search(date):
    # 设置URL模板,其中{date}将被实际日期替换
    url_template = "https://top.baidu.com/buzz?b=1&c=31&class=3&p=1&d={date}"
    url = url_template.format(date=date)
 
    # 发送HTTP请求
    response = requests.get(url)
    response.raise_for_status()
    response.encoding = 'UTF-8'
 
    # 解析网页内容
    soup = BeautifulSoup(response.text, 'html.parser')
 
    # 使用正则表达式匹配关键词
    pattern = re.compile(r'<a href="/s?wd=(.+?)&amp;.+?>(.+?)</a>')
    matches = pattern.findall(str(soup))
 
    # 输出关键词
    hot_searches = []
    for keyword, score in matches:
        hot_searches.append({
            'keyword': keyword,
            'score': score
        })
    return hot_searches
 
# 获取今天的日期字符串
today = datetime.date.today().strftime('%Y%m%d')
# 调用函数并输出结果
hot_searches = get_baidu_hot_search(today)
for search in hot_searches:
    print(search)

这段代码使用了requests库来发送HTTP请求,使用BeautifulSoup库来解析HTML,使用正则表达式来提取关键词和热度分数。代码首先定义了一个函数get_baidu_hot_search,该函数接受日期作为参数,并返回该日期的百度热搜关键词列表。然后代码获取了今天的日期字符串,并调用函数输出结果。

2024-08-19



import requests
from bs4 import BeautifulSoup
 
def get_sub_pages(start_url):
    sub_pages = []
    response = requests.get(start_url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        # 假设分站的链接都在<a>标签的href属性中
        for link in soup.find_all('a'):
            url = link.get('href')
            if url.startswith('http') and 'example.com' in url:
                sub_pages.append(url)
    return sub_pages
 
def get_total_site(sub_pages):
    total_site_data = []
    for page_url in sub_pages:
        response = requests.get(page_url)
        if response.status_code == 200:
            # 这里可以添加解析每个子页面数据的逻辑
            total_site_data.append(response.text)
    return total_site_data
 
# 示例起始URL
start_url = 'http://www.example.com'
sub_pages = get_sub_pages(start_url)
total_site_data = get_total_site(sub_pages)
 
# 这里可以添加保存数据到文件或数据库的逻辑

这个代码示例展示了如何从一个起始URL开始,通过爬取该起始URL的网页内容,找出所有相关的子网页链接,并对每个子网页进行爬取,最终获取整个网站的数据。这个过程是爬虫技术中一个常见的应用场景,展示了如何从分散的页面爬取回来并整合成一个完整的数据集。

2024-08-19



import requests
from bs4 import BeautifulSoup
import time
import json
 
# 用户信息配置
USER = {
    'username': '123456789',  # 用户名
    'password': '87654321',   # 密码
    'captcha_api': 'http://api.decaptcha.com/captcha?key=YOUR_API_KEY', # 验证码API接口
}
 
# 票务信息配置
TICKET_INFO = {
    'train_date': '2023-04-01',  # 出行日期
    'from_station': 'BJP',       # 出发站
    'to_station': 'BJQ',         # 目的地站
}
 
# 登录请求头
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',
    'Referer': 'https://kyfw.12306.cn/otn/resources/login.html',
}
 
# 初始化session,用于保持会话状态
session = requests.session()
 
def get_captcha():
    """获取验证码图片并返回验证码字符串"""
    resp = session.get(USER['captcha_api'])
    with open('captcha.jpg', 'wb') as f:
        f.write(resp.content)
    # 这里需要手动输入验证码,实际应用中可以集成OCR服务自动识别验证码
    captcha = input('请输入验证码:')
    return captcha
 
def login():
    """登录12306网站"""
    # 请求登录页面,获取加密参数
    resp = session.get('https://kyfw.12306.cn/otn/login/init')
    # 解析返回的HTML,获取加密参数
    soup = BeautifulSoup(resp.text, 'lxml')
    login_form = {
        'username': USER['username'],
        'password': USER['password'],  # 密码应为加密后的密码
        'appid': 'otn',
    }
    # 登录请求
    resp = session.post('https://kyfw.12306.cn/otn/login/loginAysnSuggest', data=login_form)
    print(resp.json())
 
def query_ticket():
    """查询票务信息"""
    # 构造查询参数
    query_params = {
        'leftTicketDTO.train_date': TICKET_INFO['train_date'],
        'leftTicketDTO.from_station': TICKET_INFO['from_station'],
        'leftTicketDTO.to_station': TICKET_INFO['to_station'],
        'purpose_codes': 'ADULT',
    }
    # 查询票务信息
    resp = session.post('https://kyfw.12306.cn/otn/leftTicket/queryZ', json=query_params, headers=HEADERS)
    print(resp.json())
 
def buy_ticket():
    """模拟购票流程"""
    # 此函数需要根据实际购票流程来编写,需要处理加入车厢、选择座位等步骤
    pass
 
def main():
    # 获取验证码
    captcha = get_captcha()
    # 登录
    login()
    # 查询票务信息
    query_ticket()
    # 自动购票
    buy_ticket()
 
if __name__ == '__main__':
    main()

这个示例代码提供了一个简化的框架来说

2024-08-19

以下是一个使用Scrapy框架爬取当当网图片信息的示例代码:

首先,创建一个Scrapy项目:




scrapy startproject dangdang_images
cd dangdang_images

然后,定义Item来存储爬取的数据:




# items.py
import scrapy
 
class DangdangImageItem(scrapy.Item):
    # 图片链接
    image_urls = scrapy.Field()
    # 图片下载后的保存路径
    image_paths = scrapy.Field()

接着,编写爬虫:




# spiders/dangdang_spider.py
import scrapy
from ..items import DangdangImageItem
 
class DangdangSpider(scrapy.Spider):
    name = 'dangdang'
    allowed_domains = ['dangdang.com']
    start_urls = ['http://category.dangdang.com/pg1-cid4002135.html']
 
    def parse(self, response):
        for product in response.css('ul.bigimg li'):
            item = DangdangImageItem()
            # 提取图片链接
            image_urls = product.css('img::attr(src)').extract()
            item['image_urls'] = image_urls
            yield item
 
        # 提取下一页链接并进行爬取
        next_page = response.css('div.paging_next a::attr(href)').extract_first()
        if next_page:
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback=self.parse)

最后,设置PIL和Scrapy图片管道以下载图片:




# pipelines.py
import os
from scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItem
 
class DangdangImagesPipeline(ImagesPipeline):
    def get_media_requests(self, item):
        for image_url in item['image_urls']:
            yield scrapy.Request(image_url)
 
    def item_completed(self, results, item, info):
        image_paths = [x['path'] for ok, x in results if ok]
        if not image_paths:
            raise DropItem('All images failed downloading.')
        item['image_paths'] = image_paths
        return item
 
    def file_path(self, request, response=None, info=None):
        image_guid = request.url.split('/')[-1]
        image_name = os.path.basename(image_guid)
        return 'full/{0}'.format(image_name)

settings.py中启用和配置图片管道以及图片存储路径:




ITEM_PIPELINES = {
    'dangdang_images.pipelines.DangdangImagesPipeline': 1,
}
 
IMAGES_STORE = 'path_to_your_images_directory'

以上代码实现了一个简单的Scrapy爬虫,用于爬取当当网产品页面的图片链接,并通过Scrapy的图片管道下载这些图片。这个案例展示了如何使用Scrapy爬取图片并保存到本地

2024-08-19



import requests
import execjs
 
# 请求网页
url = 'http://example.com/path/to/page'
response = requests.get(url)
 
# 解析JS代码,找到加密函数并调用
js_code = """
function encrypt(data) {
    // 这里是加密函数的代码
    // ...
}
"""
 
# 使用execjs执行JS代码
ctx = execjs.compile(js_code)
encrypted_data = ctx.call('encrypt', 'your_data_here')
 
# 使用加密后的数据发起POST请求
post_url = 'http://example.com/path/to/post/endpoint'
post_data = {
    'encryptedField': encrypted_data
}
post_response = requests.post(post_url, data=post_data)
 
# 打印结果
print(post_response.text)

这个示例展示了如何使用Python的requests库来获取网页内容,以及如何使用execjs库来执行提供的JavaScript加密函数,并将加密后的数据用于POST请求。这是进行Web爬虫开发时了解和应用JavaScript加密的一个基本例子。

2024-08-19

以下是一个简单的Python爬虫示例,用于爬取B站视频的信息。请注意,这个例子仅用于学习目的,实际使用时应遵守相关法律法规及网站使用协议,合理使用爬虫技术,并尽量减少对网站服务器的压力。




import requests
from bs4 import BeautifulSoup
import re
 
# 设置请求头,模拟浏览器访问
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'}
 
# 视频页面URL
url = 'https://www.bilibili.com/video/BV1v54y1q75B'
 
# 发送GET请求
response = requests.get(url, headers=headers)
 
# 检查请求是否成功
if response.status_code == 200:
    # 使用BeautifulSoup解析页面
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 通过视频标题获取信息
    title = soup.find('h1', class_='title').text
    print(f'视频标题: {title}')
    
    # 通过正则表达式获取视频播放地址
    video_url = re.findall(r'\"playUrl\":\"(http[^\"]+)\"', response.text)[0]
    print(f'视频地址: {video_url}')
    
    # 视频的描述信息
    description = soup.find('div', class_='video-desc').text.strip()
    print(f'视频描述: {description}')
    
    # 视频的评论数
    comment_count = soup.find('div', class_='number').text.strip()
    print(f'评论数: {comment_count}')
    
    # 视频的播放量
    play_count = soup.find('div', class_='view-count').text.strip()
    print(f'播放量: {play_count}')
    
    # 视频的评分
    score = soup.find('div', class_='video-score').text.strip()
    print(f'评分: {score}')
    
    # 视频的评论列表(此处仅作为示例,实际需要分页获取)
    comments = soup.find_all('div', class_='comment')
    for comment in comments:
        content = comment.find('span', class_='content').text
        print(f'评论内容: {content}')
else:
    print('请求失败')

这段代码使用了requests库来发送HTTP请求,BeautifulSoup库来解析页面,以及正则表达式来提取特定的数据。请确保在运行代码前已经安装了这些库(可以使用pip install requests beautifulsoup4命令安装)。

这个例子提取了视频标题、视频描述、评论数、播放量、评分和评论内容。实际应用中可能需要处理动态加载的数据、登录状态、反爬机制等问题,并且应该遵守B站的爬虫政策。