爬虫日记-米游社爬取

文章描述了一位用户使用Python的requests和BeautifulSoup库,通过提供自定义的cookie来抓取米游社论坛的帖子内容,包括标题、内容和图片,最后将数据整合到Word文档中。
摘要由CSDN通过智能技术生成

今天还没登录领原石,但又想看攻略帖子和看图吃瓜。于是我默默打开浏览器和PyCharm
在这里插入图片描述
找到自己的cookie
在这里插入图片描述
贴上美食

import requests
from bs4 import BeautifulSoup
import pprint
import json
import pandas as pd
import os
from docx import Document
from docx.shared import Inches


#cookie自己改一下,不改你用不了,坏蛋
url = "https://bbs-api.miyoushe.com/post/wapi/getForumPostList"
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0",
"X-Rpc-App_version":"2.70.0",
"X-Rpc-Client_type":"4",
"X-Rpc-Device_fp":"38d7f9c091ca3",
"X-Rpc-Device_id":"0bfb03a9246518991fcb49470b60151d""",
"Referer":"https://www.miyoushe.com/",
"Cookie":"cookie_token=q6k47y0jyN5yDynBdxSuwnOoUfTTTpXVGLYWV; account_id=30401680; ltoken=tRyMTatmtoQCOL0iNZgerJgUJlsMNCBAohfHzNOh; ltuid=30401680; cookie_token_v2=v2_dBSMnf3PmSE6htFffPh1rxlbZPUO8rAXndZ8bDU7wFoHHIE1uraSpiiPYwBLH-NVHsK4_LGLJ_f3ZsvJ82mMn8S7KDpyIiCka_IsJs5BRUGNzyZeqjOPFweVEr91caCBjcg=; account_mid_v2=0z336s1cdq_mhy; account_id_v2=30401680; ltoken_v2=v2_c-Q55ajaxXvJhhY5d151S7GtJW1OnFIDdUvrbM5Gg-MNSj8dIUB_3XoGTbmiHpGV0wFlOl09N5SMVs28iG8s7zviWTliGUNCwIX93RQhis2LA3w1_kYGGkjq5EV_HUEfEg==; ltmid_v2=0z336s1cdq_mhy; ltuid_v2=30401680; _MHYUUID=1e4f74db-10d1-4e79-88c2-6bef37ad1fc6; DEVICEFP_SEED_ID=430c3d7936a8b4aa; DEVICEFP_SEED_TIME=1714005305746; DEVICEFP=38d7f9c091ca3; _ga=GA1.1.1328637567.1714005306; acw_tc=ac11000117140053122492606eeedc719eea0d85349bdc1161768e634d16d4; _ga_KS4J8TXSHQ=GS1.1.1714005306.1.1.1714005388.0.0.0"

}
"""
forum_id: 表示您想要获取帖子数据的论坛ID。在这个例子中,值为50,意味着您正在请求论坛ID为50的论坛上的帖子信息。这个参数决定了您要访问哪个具体的论坛板块。

gids: 代表游戏ID。值为2,意味着您正在请求与游戏ID为2相关的帖子。这有助于过滤出特定游戏社区的讨论内容,确保返回的帖子都是关于该游戏的。

is_good 和 is_hot: 这两个参数分别表示是否只展示被标记为“精华”(优秀)的帖子(is_good="true")和是否只展示热门帖子(is_hot="true")。在您提供的示例中,这两个参数都被设置为"false",表示不进行这类筛选,返回所有普通帖子。

last_id: 通常用于分页加载数据时指定上一次请求返回数据中的最后一个帖子ID。值为"1713983516.638826",表示您希望从这个帖子之后开始获取新的帖子数据。如果首次请求,可以留空或者使用默认值;后续请求时,使用上一次请求返回的最后一个帖子ID,以便服务器返回下一页的内容。

page_size: 指定每次请求返回的帖子数量。值为20,表示您希望每次请求获取20篇帖子。这个参数用于控制数据分页的大小,以避免一次性加载过多数据导致响应时间过长或资源浪费。

sort_type: 定义帖子排序方式。虽然您提供的示例中未明确说明各个数值对应的排序类型,但通常情况下,这个参数可能会用来指定按发布时间、热度、回复数等属性进行升序或降序排列。值为1,假设其代表一种特定的排序规则,如按发布时间从新到旧排序。
"""
params = {
    "forum_id": "50",
    "gids": "2",
    "is_good": "true",
    "is_hot": "true",
    "last_id": "1713983516.638826",
    "page_size": 300,
    "sort_type": 1

}
resp = requests.get(url, params=params, headers=headers)
#print(resp.status_code)
#print(resp.text)
data = json.loads(resp.text)
"""
post_subject_content_and_cover = [(post['post']['subject'], post['post']['content'], post['post']['cover']) for post in data['data']['list']]

# 打印post_subject_content_and_cover
for subject, content, cover in post_subject_content_and_cover:
    print(f"题目: {subject}")
    print(f"内容: {content}")
    print(f"图片: {cover}\n")
"""





# 创建Word文档
doc = Document()

# 下载并插入cover图片
for post in data['data']['list']:
    cover_url = post['post']['cover']
    cover_filename = os.path.join('D:/东软学习/爬虫练习/craw/web_soul', cover_url.split('/')[-1])

    # 下载图片
    if not (cover_url.startswith("http://") or cover_url.startswith("https://")) and "." not in cover_url:
        print(f"空白(有些帖子没发图片): {cover_url}")
        continue

        # 添加协议前缀(如果缺少)
    if not cover_url.startswith("http"):
        cover_url = f"https://{cover_url}"
    response = requests.get(cover_url, stream=True)
    if response.status_code == 200:
        with open(cover_filename, 'wb') as f:
            f.write(response.content)
    else:
        print(f"Failed to download cover image: {cover_url} (Status code: {response.status_code})")

    # 插入图片到Word文档
    if os.path.exists(cover_filename):
        doc.add_picture(cover_filename, width=Inches(4))

    # 添加subject和content到Word文档
    doc.add_paragraph(post['post']['subject'], style='Heading 1')
    doc.add_paragraph(post['post']['content'])

# 保存Word文档
doc.save('米游社.docx')

拉满了,还望给个点赞和收藏!!!!
在这里插入图片描述

爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

净网平台

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值