2024-08-12

以下是一个简化的、基于Python3的网络爬虫示例,用于从百度搜索结果中抓取特定关键词的网页。请注意,实际的网络爬虫可能需要遵守robots.txt协议,以及处理更复杂的情况,比如网页的动态加载、登录验证等。




import requests
from bs4 import BeautifulSoup
 
def crawl_web(keyword):
    # 构造请求头,模拟浏览器访问
    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
    base_url = 'https://www.baidu.com/s?wd='
    url = base_url + keyword
 
    try:
        # 发送GET请求
        response = requests.get(url, headers=headers)
        # 检查响应状态
        if response.status_code == 200:
            # 解析网页
            soup = BeautifulSoup(response.text, 'html.parser')
            # 提取搜索结果中的网页链接
            links = soup.find_all('h3', class_='t')
            for link in links:
                print(link.a.get('href'))
        else:
            print('Failed to retrieve search results for:', keyword)
    except requests.exceptions.RequestException as e:
        print('Failed to crawl web. Error:', e)
 
# 使用关键词作为参数调用函数
crawl_web('Python')

这段代码使用了requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML并提取数据。代码中的crawl_web函数接收一个搜索关键词,构造请求URL,发送请求,并解析返回的HTML内容以提取搜索结果中的链接。

请注意,这个示例没有处理网页内容的详细解析,只是提取了搜索结果标题下的链接。实际的爬虫可能需要进一步提取有价值的数据,并可能需要处理网页中的AJAX、JavaScript渲染的内容。

2024-08-12

在Python中,将爬虫数据以JSON格式保存通常涉及到两个主要的库:jsonpandas。以下是一个示例,展示如何将爬虫获取的数据保存为JSON格式。




import json
import pandas as pd
 
# 假设你已经有了一个DataFrame格式的数据
data = {
    'column1': [1, 2, 3],
    'column2': ['a', 'b', 'c']
}
df = pd.DataFrame(data)
 
# 将DataFrame保存为JSON文件
df.to_json('data.json', orient='records')
 
# 如果你想直接使用json库,你需要将数据转换为列表的字典格式
data_list_dict = df.to_dict(orient='records')
 
# 将数据写入JSON文件
with open('data.json', 'w') as f:
    json.dump(data_list_dict, f)

这两种方法都可以将数据保存为JSON格式,第一种方法使用了pandas库,第二种方法使用了Python标准库中的json模块。选择哪种方法取决于你的数据格式和个人偏好。如果你已经有了一个DataFrame,使用to_json方法会更直接;如果你手头的是其他类型的数据结构,可能需要先将其转换为列表的字典格式。

2024-08-12



from sklearn.cluster import KMeans
import pandas as pd
 
# 读取数据
data = pd.read_csv('data.csv')
 
# 特征缩放
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data)
 
# K-means聚类
kmeans = KMeans(n_clusters=3)  # 假设我们要分成3个簇
kmeans.fit(scaled_data)
labels = kmeans.labels_
centroids = kmeans.cluster_centers_
 
# 将标签添加回原始数据
data['cluster'] = labels
 
# 输出聚类中心
print("Cluster Centroids:")
print(centroids)
 
# 可视化聚类结果
import matplotlib.pyplot as plt
 
# 定义颜色集合
colors = ['r', 'g', 'b']
 
# 绘制每个簇的点
for i in range(len(centroids)):
    cluster_points = data[data['cluster'] == i]
    plt.scatter(cluster_points['特征1'], cluster_points['特征2'], c=colors[i])
 
# 绘制簇的中心点
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', c='black')
plt.show()

这个代码实例展示了如何使用K-means算法对XX餐馆的满意度数据进行聚类分析。首先,我们读取数据并对其进行特征缩放。然后,我们使用KMeans类进行聚类,并输出聚类中心。最后,我们将聚类结果可视化,其中包括每个簇的点和簇的中心点。这个过程是数据挖掘和机器学习的一个常见应用,对于学习数据分析和机器学习的开发者来说,这是一个很好的实践。

2024-08-12

写一个爬虫程序总共分以下几个步骤:

  1. 确定目标URL:决定你想要抓取的网站或网页的URL。
  2. 发送HTTP请求:使用如requests库,发送HTTP GET请求到目标URL。
  3. 解析响应内容:使用如BeautifulSoup库,解析返回的HTML内容,以便提取需要的数据。
  4. 提取数据:定位到你感兴趣的数据,例如链接、图片、文本等。
  5. 保存数据(可选):将提取的数据保存到文件或数据库中。
  6. 处理异常:处理可能出现的网络问题、HTTP错误等异常情况。

以下是一个简单的Python爬虫示例代码:




import requests
from bs4 import BeautifulSoup
 
# 目标URL
url = 'http://example.com'
 
# 发送HTTP请求
response = requests.get(url)
 
# 解析响应内容
soup = BeautifulSoup(response.text, 'html.parser')
 
# 提取数据
data = soup.find_all('a')  # 例如提取所有的a标签
 
# 打印数据
for item in data:
    print(item.get('href'))
 
# 保存数据到文件(例如保存为example.txt)
with open('example.txt', 'w') as file:
    file.write(soup.prettify())

请注意,实际爬取数据时需要遵守目标网站的robots.txt规则,并在允许的范围内进行爬取,避免对网站造成过大压力,同时要考虑版权问题和法律责任。

2024-08-12



import requests
from bs4 import BeautifulSoup
import re
import os
 
class DoubanSpider:
    def __init__(self, url):
        self.url = url
        self.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_page(self, url):
        response = requests.get(url, headers=self.headers)
        if response.status_code == 200:
            return response.text
        return None
 
    def parse_index(self, html):
        soup = BeautifulSoup(html, 'lxml')
        movie_list = soup.find('ol', 'grid_view')
        if movie_list:
            for movie in movie_list.find_all('li'):
                yield {
                    'name': movie.find('span', 'title').getText().strip(),
                    'score': movie.find('span', 'rating_num').getText()
                }
 
    def save_to_file(self, data):
        with open('douban.txt', 'a', encoding='utf-8') as f:
            f.write(f"{data['name']}: {data['score']}\n")
 
    def run(self):
        html = self.get_page(self.url)
        for data in self.parse_index(html):
            print(f"{data['name']}: {data['score']}")
            self.save_to_file(data)
 
if __name__ == '__main__':
    url = 'https://movie.douban.com/tag/#/?sort=T&range=2,10&tags=%E7%83%AD%E9%97%A8'
    DoubanSpider(url).run()

这段代码实现了一个简单的基于Python的豆瓣电影爬虫,它能够抓取豆瓣电影标签页(这里使用的是国产电影标签作为示例)上的电影名称和评分,并将结果输出到控制台和保存到本地文件。这个示例展示了如何组织爬虫的结构,并包含了请求头的添加,以及对HTML内容的解析和提取。

2024-08-12



import requests
from bs4 import BeautifulSoup
 
# 发送HTTP请求
def get_html(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        else:
            return "页面无法访问"
    except requests.RequestException:
        return "发生错误"
 
# 解析HTML并提取数据
def parse_soup(soup):
    data = []
    for item in soup.select('div.item'):   # 使用CSS选择器选取元素
        title = item.select('a')[0].text  # 提取标题
        link = item.select('a')[0]['href']  # 提取链接
        data.append((title, link))
    return data
 
# 主函数
def main(url):
    html = get_html(url)
    soup = BeautifulSoup(html, 'html.parser')  # 使用HTML解析器
    parsed_data = parse_soup(soup)
    for title, link in parsed_data:
        print(f'标题: {title}, 链接: {link}')
 
# 用例
if __name__ == "__main__":
    url = 'https://example.com'  # 替换为目标网站的URL
    main(url)

这段代码展示了如何使用Python的requests库发送HTTP请求,以及如何使用BeautifulSoup库解析HTML并提取数据。代码中的get_html函数负责发送请求并获取页面内容,parse_soup函数负责解析页面并提取标题和链接,最后在main函数中调用这两个函数来完成整个爬取过程。

2024-08-12

BeautifulSoup是一个Python库,用于从HTML或XML文件中提取数据。以下是一个使用BeautifulSoup库的简单示例,该示例从一个网页下载HTML内容,并使用BeautifulSoup解析该内容以提取数据。

首先,你需要安装BeautifulSoup库,如果还没有安装,可以使用pip安装:




pip install beautifulsoup4

然后,你可以使用以下代码来提取网页数据:




import requests
from bs4 import BeautifulSoup
 
# 下载网页
url = 'http://example.com'
response = requests.get(url)
 
# 检查网页是否成功下载
if response.status_code == 200:
    # 使用BeautifulSoup解析网页内容
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 提取数据
    # 例如,提取标题
    title = soup.title.text
    print(title)
    
    # 提取所有的段落
    paragraphs = soup.find_all('p')
    for p in paragraphs:
        print(p.text)
else:
    print("Failed to download the webpage")

这段代码首先使用requests库下载了一个网页,然后使用BeautifulSoup库解析HTML内容,并提取了标题和所有段落文字。你可以根据需要提取其他数据,例如提取所有的链接、图片或表格等。

2024-08-12



import requests
from bs4 import BeautifulSoup
 
# 爬取网页的函数
def crawl_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    else:
        return None
 
# 解析网页并提取信息的函数
def parse_soup(soup):
    title = soup.find('h1', class_='post-title').get_text()
    content = soup.find('div', class_='post-content').get_text()
    return title, content
 
# 主函数,组装URL并调用爬取和解析函数
def main(url):
    html = crawl_page(url)
    if html:
        soup = BeautifulSoup(html, 'html.parser')
        title, content = parse_soup(soup)
        print(f"标题: {title}")
        print(f"内容: {content}")
    else:
        print("网页爬取失败")
 
# 示例URL
example_url = 'https://www.example.com/some-post'
 
# 运行主函数
main(example_url)

这段代码使用了requests库来爬取网页,使用BeautifulSoup库来解析HTML,并提取了一个假设的博客文章页面的标题和内容。这个例子简单且直接,适合作为教学使用。

2024-08-12

要爬取豆瓣上的数据,你可以使用Python的requests和BeautifulSoup库。以下是一个简单的示例,展示了如何爬取豆瓣电影TOP250的电影信息。

首先,安装所需库(如果尚未安装的话):




pip install requests
pip install beautifulsoup4

然后,使用以下代码爬取数据:




import requests
from bs4 import BeautifulSoup
import csv
 
# 定义要爬取的豆瓣电影TOP250页面的URL
def get_page_source(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except requests.RequestException:
        return None
 
# 解析页面并提取电影信息
def parse_page(html):
    soup = BeautifulSoup(html, 'html.parser')
    movie_list = soup.find_all('div', class_='info')
    for movie in movie_list:
        rank = movie.find('em').get_text()
        title = movie.find('span', class_='title').get_text()
        rating = movie.find('span', class_='rating_num').get_text()
        yield {
            'rank': rank,
            'title': title,
            'rating': rating
        }
 
# 保存数据到CSV文件
def save_to_csv(data):
    with open('douban_movies.csv', 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=['rank', 'title', 'rating'])
        writer.writeheader()
        for item in data:
            writer.writerow(item)
 
# 主函数
def main():
    base_url = 'https://movie.douban.com/top250?start='
    urls = [base_url + str(i * 25) for i in range(10)]  # 假设总共有10页
    movie_data = []
 
    for url in urls:
        html = get_page_source(url)
        if html:
            movie_data.extend(parse_page(html))
 
    save_to_csv(movie_data)
 
if __name__ == '__main__':
    main()

这段代码会生成一个名为douban_movies.csv的CSV文件,其中包含了电影的排名、名称和评分。

注意:

  1. 爬取数据时应遵守豆瓣的robots.txt协议,并尊重网站的爬取政策。
  2. 实际爬取过程中可能需要处理登录、反爬虫机制等问题,可能需要使用代理、Session对象、设置User-Agent等。
  3. 爬取数据应尊重网站版权和隐私,不得用于商业目的以外的非法活动。
2024-08-12



import asyncio
import aiohttp
 
async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()
 
async def main():
    async with aiohttp.ClientSession() as session:
        html = await fetch(session, 'http://httpbin.org/headers')
        print(html)
 
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

这段代码使用了asyncio和aiohttp库来编写一个简单的异步HTTP客户端。fetch函数负责发送HTTP请求并获取响应文本,而main函数则使用异步上下文管理器async with来管理ClientSession,并调用fetch函数获取网页内容。最后,使用异步事件循环asyncio.get_event_loop()运行main函数。这是Python异步协程编程的一个基本示例。