2024-08-16



import requests
from bs4 import BeautifulSoup
import re
 
def get_bilibili_top100(top100_url):
    # 发送请求,获取页面源代码
    response = requests.get(top100_url)
    response.raise_for_status()
    soup = BeautifulSoup(response.text, 'lxml')
 
    # 提取视频封面图片的正则表达式
    cover_regex = re.compile(r'//.*?cover')
 
    # 提取视频源代码的正则表达式
    video_source_regex = re.compile(r'<source src="(.*?)".*?>')
 
    # 遍历页面,查找视频封面图片和视频源
    covers = cover_regex.findall(response.text)
    video_sources = video_source_regex.findall(response.text)
 
    # 输出结果
    for cover, video_source in zip(covers, video_sources):
        print(f"封面图片: {cover}")
        print(f"视频源: {video_source}")
 
# 使用函数
get_bilibili_top100('https://www.bilibili.com/v/popular/rank/type?tab=all')

这段代码使用了requests库来发送HTTP请求,获取B站TOP100视频页面的HTML内容。然后使用BeautifulSoup和正则表达式来提取视频封面图片的URL和视频源的URL。最后,遍历页面中的视频信息,并打印出封面图片和视频源的URL。

2024-08-16

要爬取淘宝的商品数据,你可以使用Python的requests和lxml库来实现。以下是一个简单的例子,展示如何获取淘宝商品页面的某些信息:




import requests
from lxml import etree
 
def get_item_info(item_url):
    headers = {
        'User-Agent': 'your_user_agent',  # 替换为你的User-Agent
    }
    response = requests.get(item_url, headers=headers)
    if response.status_code == 200:
        html = response.text
        tree = etree.HTML(html)
        
        # 获取商品标题
        title = tree.xpath('//div[@class="tb-detail-hd"]/h1/text()')[0]
        print(f'商品标题: {title}')
        
        # 获取商品价格
        price = tree.xpath('//div[@class="price"]/strong/text()')[0]
        print(f'商品价格: {price}')
        
        # 获取商品评分
        score = tree.xpath('//div[@class="rate-content"]/@title')[0]
        print(f'商品评分: {score}')
        
        # 获取商品销售量
        sales = tree.xpath('//div[@class="deal-cnt"]/text()')[0]
        print(f'商品销售量: {sales}')
    else:
        print('获取页面失败')
 
item_url = 'https://item.taobao.com/item.htm?id=商品ID'  # 替换为具体的商品ID
get_item_info(item_url)

请注意,你需要替换your_user_agent为你自己的User-Agent,以及将商品ID替换为具体的淘宝商品编号。此外,由于淘宝采取了反爬措施,如果频繁访问,可能需要使用代理和合适的请求头信息,以避免被淘宝服务器封禁。

此代码只是一个简单的示例,实际爬取时你可能需要处理更多的数据和面对更复杂的情况,例如动态加载的数据、登录验证等。

2024-08-16



import requests
import pandas as pd
from pyecharts.charts import Bar, Line
from pyecharts import options as opts
 
# 获取数据
def get_data(url):
    response = requests.get(url)
    return response.json()
 
# 解析数据
def parse_data(data):
    records = data['records']
    provinces = [record['provinceName'] for record in records]
    confirmed_cases = [record['confirmedCount'] for record in records]
    suspected_cases = [record['suspectedCount'] for record in records]
    cured_cases = [record['curedCount'] for record in records]
    dead_cases = [record['deadCount'] for record in records]
    return provinces, confirmed_cases, suspected_cases, cured_cases, dead_cases
 
# 可视化数据
def visualize_data(provinces, confirmed_cases, suspected_cases, cured_cases, dead_cases):
    # 确诊变异情况柱状图
    bar = Bar()
    bar.add_xaxis(provinces)
    bar.add_yaxis("确诊", confirmed_cases)
    bar.add_yaxis("疑似", suspected_cases)
    bar.set_global_opts(title_opts=opts.TitleOpts(title="变异情况柱状图"))
    bar.render("变异情况.html")
 
    # 累计治愈和死亡情况折线图
    line = Line()
    line.add_xaxis(provinces)
    line.add_yaxis("治愈", cured_cases, is_smooth=True)
    line.add_yaxis("死亡", dead_cases, is_smooth=True)
    line.set_global_opts(title_opts=opts.TitleOpts(title="治愈与死亡累计折线图"))
    line.render("治愈与死亡.html")
 
# 主函数
def main():
    url = "https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=FAutoCountry,WomWorld,AiCountry,WomAboard,CountryOther,OverseaFightForecast,WomAboardForecast,GlobalFight,ChinaFight,FightAroundWorld,FightCountry,FightProvince,FightType,MasksSupplies,FightForecast,FightTips,FightAroundWorldForecast,CountryOtherForecast&_=1615366747766"
    data = get_data(url)
    provinces, confirmed_cases, suspected_cases, cured_cases, dead_cases = parse_data(data)
    visualize_data(provinces, confirmed_cases, suspected_cases, cured_cases, dead_cases)
 
if __name__ == "__main__":
    main()

这段代码使用了pyecharts库来创建图表,并且使用requests库来发送HTTP请求从网络上获取数据。首先定义了一个获取数据的函数,然后解析数据,并定义了一个可视化数据的函数。最后,在主函数中调用这些函数来完成数据的爬取和可视化展示。

2024-08-16



import requests
from bs4 import BeautifulSoup
import re
import time
 
def get_soup(url):
    """
    获取网页内容并返回BeautifulSoup对象
    """
    headers = {
        'User-Agent': 'Mozilla/5.0',
        'From': 'your_email@example.com' # 替换为你的邮箱
    }
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return BeautifulSoup(response.text, 'html.parser')
    except requests.RequestException:
        print(f"An error occurred while trying to retrieve {url}")
        time.sleep(5)
 
def extract_links(soup):
    """
    从BeautifulSoup对象中提取新闻链接
    """
    # 根据实际HTML结构修改选择器
    return [link['href'] for link in soup.select('a.news-title') if link.get('href') and re.match(r'^http', link['href'])]
 
def main():
    url = 'http://example.com/news' # 替换为你要爬取的新闻网站
    soup = get_soup(url)
    if soup:
        links = extract_links(soup)
        for link in links:
            print(link)
 
if __name__ == '__main__':
    main()

这段代码提供了一个简单的网络爬虫示例,用于从一个假设的新闻网站中提取新闻链接。在实际应用中,你需要替换'example.com/news'为你要爬取的实际网站,并确保选择器(如'a.news-title')匹配目标网站的HTML结构。此外,记得遵守网站的robots.txt规则和法律法规,尊重网站版权和隐私政策。

2024-08-16



# 导入Django模型
from django.db import models
 
# 定义爬虫项目模型
class Project(models.Model):
    name = models.CharField(max_length=200)
    # 其他字段...
 
# 定义爬虫任务模型
class Task(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    url = models.URLField()
    # 其他字段...
 
# 定义爬虫统计模型
class Statistic(models.Model):
    task = models.ForeignKey(Task, on_delete=models.CASCADE)
    items_scraped = models.IntegerField()
    # 其他字段...

这个例子展示了如何使用Django的模型来定义一个简单的爬虫管理系统的数据结构。每个爬虫项目可以有多个爬虫任务,每个爬虫任务生成相应的统计数据。这个系统可以用来跟踪和管理企业级的爬虫项目。

2024-08-16



from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
 
# 初始化webdriver
driver = webdriver.Chrome()
 
# 打开网页
driver.get("http://example.com")
 
# 等待网页加载完成
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, "myElementId")))
 
# 执行动作链,模拟鼠标点击操作
actions = webdriver.ActionChains(driver)
actions.move_to_element(driver.find_element(By.ID, "myMenu")).click(driver.find_element(By.ID, "subMenu")).perform()
 
# 输入搜索内容
input_element = driver.find_element(By.ID, "mySearchBar")
input_element.send_keys("search keyword")
 
# 提交搜索
input_element.send_keys(Keys.RETURN)
 
# 滚动页面
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
 
# 等待动态内容加载
time.sleep(5)
 
# 获取页面源代码
page_source = driver.page_source
 
# 清理:关闭浏览器
driver.quit()

这段代码展示了如何使用Selenium WebDriver在Python中打开一个网页,执行鼠标点击、输入搜索关键字、提交搜索和滚动页面的基本操作。同时,它还展示了如何使用ActionChains来模拟复杂的用户动作。最后,代码中使用了time.sleep()来等待动态内容加载,这通常不是推荐的做法,可以使用WebDriverWait来代替,但出于教学目的,这里简化了处理方式。

2024-08-16

由于英雄联盟的官方网站可能会更改其网站结构,这里提供一个简化的Python爬虫示例,用于爬取英雄联盟官方网站上英雄列表的名称。




import requests
from bs4 import BeautifulSoup
 
def get_hero_names():
    url = 'https://lol.qq.com/biz/hero/champion.shtml'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    hero_list = soup.find('div', class_='herolist clearfix')
    hero_names = [hero.text for hero in hero_list.find_all('h3')]
    return hero_names
 
if __name__ == '__main__':
    hero_names = get_hero_names()
    for hero in hero_names:
        print(hero)

这段代码使用了requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML页面。函数get_hero_names通过查找特定的HTML元素来获取英雄的名称,并返回一个包含英雄名称的列表。主程序部分则简单地打印出这些英雄名称。

请注意,这个例子假设英雄联盟官方网站的URL和HTML结构不会改变。如果官方网站更新了其结构,则需要相应地更新爬虫代码以匹配新的结构。

2024-08-16



import pandas as pd
import numpy as np
import statsmodels.api as sm
from datetime import datetime
 
# 假设这是从股票网站爬取的数据,已经加载到DataFrame中
data = pd.read_csv('stock_data.csv', parse_dates=['date'])
 
# 选择需要的列
data = data[['date', 'close', 'volume']]
 
# 将数据按日期排序
data.sort_values('date', inplace=True)
 
# 计算每日收盘价的对数返回
data['log_ret'] = np.log(data['close'] / data['close'].shift(1))
 
# 选择过去10个交易日的平均每日成交量作为因子
data['vol_10'] = data['volume'].rolling(window=10).mean()
 
# 创建一个数据框,用于存储模型的结果
results = pd.DataFrame(columns=['intercept', 'beta', 'alpha', 'omega'])
 
# 遍历不同的时间窗口来测试三因子模型的参数
for lag in range(1, 11):
    X = sm.add_constant(data[['log_ret', 'vol_10']].shift(lag))
    results.loc[lag] = sm.OLS(data['log_ret'], X).fit().params
 
# 输出结果
print(results)

这段代码首先加载股票数据,然后计算每日的收盘价的对数返回,并创建一个新的列来表示过去10天平均的成交量。接着,代码遍历不同的时间窗口来拟合一个OLS模型,并存储模型的参数结果。最后,打印出结果。这个例子展示了如何使用Python进行简单的金融时间序列分析。

2024-08-16

要使用Python来模拟执行JavaScript代码,你可以使用PyMiniRacer库,这是一个JavaScript引擎,可以用来执行JavaScript代码。以下是一个简单的例子,展示如何使用PyMiniRacer执行一个简单的JavaScript函数。

首先,你需要安装PyMiniRacer




pip install PyMiniRacer

然后,你可以使用以下代码来执行JavaScript代码:




from PyMiniRacer import py_mini_racer
 
# 创建JavaScript引擎实例
context = py_mini_racer.MiniRacer()
 
# 定义JavaScript代码
js_code = """
function add(a, b) {
    return a + b;
}
add(2, 3);
"""
 
# 执行JavaScript代码
result = context.eval(js_code)
print(result)  # 输出: 5

在这个例子中,我们创建了一个MiniRacer实例,然后定义了一个简单的JavaScript函数add,接着我们执行这个函数并打印结果。这个例子演示了如何使用Python来执行JavaScript代码,这对于处理一些动态网站或者需要执行客户端JavaScript逻辑的情况非常有用。

2024-08-16

由于提出的查询涉及的内容较多,我将提供一个简化的示例,展示如何使用Django框架创建一个简单的网站来可视化爬取的数据。




# 安装Django
# pip install django
 
# 创建项目和应用
# django-admin startproject myproject
# python manage.py startapp myapp
 
# myproject/myapp/models.py
from django.db import models
 
class TouristSpot(models.Model):
    name = models.CharField(max_length=100)
    location = models.CharField(max_length=100)
    description = models.TextField()
 
    def __str__(self):
        return self.name
 
# myproject/myapp/views.py
from django.shortcuts import render
from .models import TouristSpot
 
def home(request):
    spots = TouristSpot.objects.all()
    return render(request, 'home.html', {'spots': spots})
 
# myproject/myapp/urls.py
from django.urls import path
from .views import home
 
urlpatterns = [
    path('', home, name='home'),
]
 
# myproject/templates/home.html
<!DOCTYPE html>
<html>
<head>
    <title>Beijing Tourist Spots</title>
</head>
<body>
    <h1>Beijing Tourist Spots</h1>
    <ul>
        {% for spot in spots %}
        <li>{{ spot.name }} - {{ spot.location }}</li>
        {% endfor %}
    </ul>
</body>
</html>

这个简单的示例展示了如何使用Django模型来定义景点数据,视图函数来渲染数据,以及如何在HTML模板中循环显示数据。这个示例不包含爬虫代码,因为这个问题的重点是数据可视化,而爬虫通常是数据收集的一部分。实际应用中,爬虫代码会与这些Django组件配合工作,抓取数据并将其存储到模型中,然后通过视图和模板展示出来。