0
点赞
收藏
分享

微信扫一扫

推理还原的干货

花姐的职场人生 2024-07-24 阅读 5
爬虫

爬取网页源代码

        抓取百度首页的HTML源代码,并将其保存到一个名为baidu.html的文件中。打开这个文件,可以看到一个和百度首页一模一样的页面。

from urllib.request import urlopen

# 发送请求并获取响应
response = urlopen("http://www.baidu.com")

# 读取响应内容并解码为字符串
web_content = response.read().decode("utf-8")

# 将抓取到的网页内容保存到文件中
with open("baidu.html", mode="w", encoding="utf-8") as file:
    file.write(web_content)

网页请求过程

F12的使用、HTTP协议

        可以使用Chrome浏览器,按下F12打开开发者工具。

requests入门

案例1:搜狗搜索——保存搜索内容的页面 

import requests
import time
import random

# 提示用户输入搜索关键字
search_query = input("请输入你要搜索的内容:")

# 构造请求URL
url = f"https://www.sogou.com/web?query={search_query}"

# 定义请求头,模拟浏览器请求
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 "
                  "Edg/126.0.0.0 ",
    "Referer": "https://www.sogou.com/",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "Accept-Encoding": "gzip, deflate, br, zstd"
}

# 使用会话对象来管理Cookies和保持状态
session = requests.Session()

# 发送GET请求并获取响应
response = session.get(url, headers=headers)

# 检查响应状态码,确保请求成功
if response.status_code == 200:
    # 打开一个文件,用于保存响应内容
    with open("sogou_search_results.html", mode="w", encoding="utf-8") as file:
        # 将响应内容写入文件
        file.write(response.text)
    print("搜索结果已保存到sogou_search_results.html文件中。")
else:
    # 如果请求失败,打印错误信息
    print(f"请求失败,状态码: {response.status_code}")

# 增加请求间隔,模拟真实用户行为
time.sleep(random.uniform(1, 3))

案例2:百度翻译——获取翻译后的内容

import requests

# 提示用户输入要翻译的英语单词
english_word = input("请输入你要翻译的英语单词:")

# 准备POST请求的数据
data = {
    "kw": english_word  # 请求参数,与抓包工具里的参数一致
}

# 发送POST请求到百度翻译的sug接口
response = requests.post("https://fanyi.baidu.com/sug", data=data)

# 解析返回的JSON数据
response_json = response.json()

# 打印返回字典中第一个数据的翻译内容
if response.status_code == 200:
    if 'data' in response_json:
        first_translation = response_json['data'][0]['v']
        print(f"翻译结果: {first_translation}")
    else:
        print("未找到相关翻译结果。")
else:
    print(f"请求失败,状态码: {response.status_code}")

案例3:豆瓣电影——保存豆瓣电影分类排行榜(剧情片 )的top100

import csv
import requests

# 请求URL和参数
url = 'https://movie.douban.com/j/chart/top_list'
params = {
    'type': '11',        # 类型,这里是剧情片类型
    'interval_id': '100:90',  # 评分区间,表示评分在90到100之间
    'action': '',        # 动作参数,此处为空
    'start': '0',        # 开始取数据的索引,从第一部电影开始取
    'limit': '100',       # 每次取出的电影数量
}

headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
}

# 发送GET请求并获取响应
response = requests.get(url=url, params=params, headers=headers)

# 将响应内容保存为JSON文件
if response.status_code == 200:
    data = response.json()
    with open('./douban_movies.csv', 'w', encoding='utf-8', newline='') as csvfile:
        fieldnames = ['rank', 'title', 'score', 'types', 'regions', 'release_date', 'actors']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

        writer.writeheader()
        for movie in data:
            writer.writerow({
                'rank': movie['rank'],
                'title': movie['title'],
                'score': movie['score'],
                'types': '/'.join(movie['types']),
                'regions': '/'.join(movie['regions']),
                'release_date': movie['release_date'],
                'actors': '/'.join(movie['actors']),
            })

    print('电影数据已保存到 douban_movies.csv 文件中。')
else:
    print(f'请求失败,状态码: {response.status_code}')


案例4:下载图片——从豆瓣电影网站中下载一张海报 

import requests


def download_image(url, file_name):
    try:
        # 发送GET请求获取图片数据
        response = requests.get(url)
        if response.status_code == 200:
            # 从URL中提取文件名作为保存的文件名,将图片内容写入文件
            with open(file_name, mode="wb") as f:
                f.write(response.content)    # 字节
            print(f"图片已保存为 {file_name}")
        else:
            print(f"请求失败,状态码: {response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"请求异常: {e}")


# 示例:从豆瓣中下载一张电影海报
image_url = "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg"
file_name = "Example.jpg"

download_image(image_url, file_name)
举报

相关推荐

0 条评论