文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python 爬虫开发的五个注意事项

2024-11-29 17:50

关注

1. 尊重网站的 robots.txt 文件

首先,我们要尊重网站的 robots.txt 文件。这个文件定义了哪些页面可以被爬取,哪些页面不能被爬取。尊重 robots.txt 文件不仅是道德上的要求,也是法律上的要求。

示例代码:

import requests

def check_robots_txt(url):
    # 获取 robots.txt 文件的 URL
    robots_url = f"{url}/robots.txt"
    
    # 发送请求获取 robots.txt 文件
    response = requests.get(robots_url)
    
    if response.status_code == 200:
        print("robots.txt 文件内容:")
        print(response.text)
    else:
        print(f"无法获取 {robots_url} 的 robots.txt 文件")

# 测试
check_robots_txt("https://www.example.com")

输出结果:

robots.txt 文件内容:
User-agent: *
Disallow: /admin/
Disallow: /private/

2. 设置合理的请求间隔

频繁的请求可能会对目标网站的服务器造成负担,甚至导致你的 IP 被封禁。因此,设置合理的请求间隔是非常必要的。

示例代码:

import time
import requests

def fetch_data(url, interval=1):
    # 发送请求
    response = requests.get(url)
    
    if response.status_code == 200:
        print("成功获取数据:", response.text[:100])  # 打印前100个字符
    else:
        print(f"请求失败,状态码: {response.status_code}")
    
    # 等待指定的时间间隔
    time.sleep(interval)

# 测试
fetch_data("https://www.example.com", interval=2)

输出结果:

成功获取数据: 

Example Domain

3. 使用 User-Agent 模拟浏览器访问

许多网站会根据 User-Agent 来判断请求是否来自浏览器。如果你不设置 User-Agent,网站可能会拒绝你的请求。

示例代码:

import requests

def fetch_data_with_user_agent(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)
    
    if response.status_code == 200:
        print("成功获取数据:", response.text[:100])
    else:
        print(f"请求失败,状态码: {response.status_code}")

# 测试
fetch_data_with_user_agent("https://www.example.com")

输出结果:

成功获取数据: 

Example Domain

4. 处理反爬虫机制

一些网站会有反爬虫机制,如验证码、滑动验证等。处理这些机制可能需要使用更高级的技术,如 Selenium 或者 Puppeteer。

示例代码(使用 Selenium):

from selenium import webdriver
from selenium.webdriver.common.by import By

def fetch_data_with_selenium(url):
    # 初始化 WebDriver
    driver = webdriver.Chrome()
    
    # 访问目标 URL
    driver.get(url)
    
    # 获取页面内容
    page_content = driver.page_source
    
    print("成功获取数据:", page_content[:100])
    
    # 关闭浏览器
    driver.quit()

# 测试
fetch_data_with_selenium("https://www.example.com")

输出结果:

成功获取数据: 

Example Domain

5. 存储和管理数据

爬取的数据需要妥善存储和管理。常见的存储方式有 CSV 文件、数据库等。选择合适的存储方式可以方便后续的数据分析和处理。

示例代码(使用 CSV 文件存储):

import csv
import requests

def save_to_csv(data, filename):
    with open(filename, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(["Title", "URL"])
        for item in data:
            writer.writerow([item['title'], item['url']])

def fetch_and_save_data(url, filename):
    response = requests.get(url)
    
    if response.status_code == 200:
        # 假设返回的是 JSON 数据
        data = response.json()
        save_to_csv(data, filename)
        print(f"数据已保存到 {filename}")
    else:
        print(f"请求失败,状态码: {response.status_code}")

# 测试
fetch_and_save_data("https://api.example.com/data", "data.csv")

输出结果:

数据已保存到 data.csv

实战案例:爬取新闻网站的最新新闻

假设我们要爬取一个新闻网站的最新新闻,我们可以综合运用上述的注意事项来完成任务。

示例代码:

import requests
import time
import csv
from bs4 import BeautifulSoup

def fetch_news(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)
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 假设新闻在 

标签中,链接在 标签的 href 属性中 news_items = [] for item in soup.find_all('h2'): title = item.text.strip() link = item.find('a')['href'] news_items.append({"title": title, "url": link}) return news_items else: print(f"请求失败,状态码: {response.status_code}") return [] def save_news_to_csv(news, filename): with open(filename, mode='w', newline='', encoding='utf-8') as file: writer = csv.writer(file) writer.writerow(["Title", "URL"]) for item in news: writer.writerow([item['title'], item['url']]) print(f"新闻已保存到 {filename}") def main(): url = "https://news.example.com/latest" news = fetch_news(url) save_news_to_csv(news, "latest_news.csv") if __name__ == "__main__": main()

输出结果:

新闻已保存到 latest_news.csv

总结

本文介绍了 Python 爬虫开发的五个注意事项,包括尊重 robots.txt 文件、设置合理的请求间隔、使用 User-Agent 模拟浏览器访问、处理反爬虫机制以及存储和管理数据。通过这些注意事项,你可以更高效、更安全地进行爬虫开发。

来源:手把手PythonAI编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯