爬虫日记-米游社爬取

今天还没登录领原石,但又想看攻略帖子和看图吃瓜。于是我默默打开浏览器和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')

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

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,我可以为您介绍一下如何使用 Python 爬虫爬取房产数据并保存到本地。 首先,您需要选择一个合适的网站来进行爬取。例如,可以选择链家网、安居客等房产网站。然后,您需要分析该网站的页面结构和数据请求方式,确定需要爬取哪些数据,以及如何获取这些数据。 接着,您可以使用 Python 的 requests 库来发送 HTTP 请求,获取网页内容。然后,可以使用 BeautifulSoup 库来解析网页内容,提取需要的数据。 最后,您可以使用 Python 的 Pandas 库将数据保存到本地的 Excel 或 CSV 文件中。以下是一个示例代码: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 发送 HTTP 请求获取网页内容 url = 'https://bj.lianjia.com/ershoufang/' 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) soup = BeautifulSoup(response.content, 'html.parser') # 解析网页内容,提取需要的数据 house_list = soup.find_all('div', {'class': 'info'}) data = [] for house in house_list: name = house.find('div', {'class': 'title'}).text.strip() price = house.find('div', {'class': 'price'}).text.strip() area = house.find('div', {'class': 'houseInfo'}).text.strip() data.append([name, price, area]) # 将数据保存到本地文件 df = pd.DataFrame(data, columns=['名称', '价格', '面积']) df.to_excel('house_data.xlsx', index=False) ``` 这是一个简单的示例代码,您可以根据您需要爬取的数据和网站的不同来进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

净网平台

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

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

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

打赏作者

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

抵扣说明:

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

余额充值