5分钟教会你用Python采集CSDN的热榜

18 篇文章 36 订阅
4 篇文章 2 订阅

上次发了一篇《热榜标题词云实时更新词云上线,给标题起名提供参观建议》,今天突然上热榜一一段时间,还被范博at了。虽然对上热榜本身已经无感,但是被范博at还非常让我高兴的。

image-20211024180916650

这到晚上后,有人在评论区问到热榜数据怎么爬。

热心的我,现在就花几分钟时间教会大家。

首先,打开热榜页面并打开开发者工具,监控xhr类型的请求:

image-20211024181541631

然后复制为curl(bash)类型的请求:

image-20211024181941556

然后我们在jupyte中执行:

!curl2py

image-20211024182410363

注意:该命令需要安装filestools

安装命令:pip install filestools

详见:https://pypi.org/project/filestools/

然后就可以将当前请求的python代码粘贴出来了,删除cookie部分后如下:

import requests
import json

headers = {
    "authority": "blog.csdn.net",
    "accept": "application/json, text/plain, */*",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
    "sec-fetch-site": "same-origin",
    "sec-fetch-mode": "cors",
    "sec-fetch-dest": "empty",
    "referer": "https://blog.csdn.net/rank/list",
    "accept-language": "zh-CN,zh;q=0.9"
}
params = {
    "page": "0",
    "pageSize": "25"
}

res = requests.get(
    "https://blog.csdn.net/phoenix/web/blog/hot-rank",
    params=params,
    headers=headers,
)
print(res.text)

这样我们就能获取到热榜第一页的数据。

稍微改进一下代码,循环爬取四页:

import pandas as pd
import requests

headers = {
    "authority": "blog.csdn.net",
    "accept": "application/json, text/plain, */*",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
    "sec-fetch-site": "same-origin",
    "sec-fetch-mode": "cors",
    "sec-fetch-dest": "empty",
    "referer": "https://blog.csdn.net/rank/list",
    "accept-language": "zh-CN,zh;q=0.9"
}
session = requests.session()
session.get("https://blog.csdn.net/rank/list", headers=headers)

params = {
    "page": "",
    "pageSize": "25"
}
result = []
for i in range(4):
    params["page"] = str(i)
    res = session.get(
        "https://blog.csdn.net/phoenix/web/blog/hot-rank", params=params, headers=headers)
    df = pd.DataFrame(res.json()['data'])[[
        "userName", "nickName", "articleTitle", "viewCount",
        "commentCount", "favorCount", "articleDetailUrl", "hotRankScore"]]
    result.append(df)
hot_rank = pd.concat(result, ignore_index=True)
hot_rank.commentCount = hot_rank.commentCount.astype(int)
hot_rank.favorCount = hot_rank.favorCount.astype(int)
hot_rank.viewCount = hot_rank.viewCount.astype(int)
hot_rank.hotRankScore = hot_rank.hotRankScore.astype(int)
hot_rank.index += 1
hot_rank.reset_index(inplace=True)
hot_rank.columns = ["排名", "csdnid", "昵称", "标题", "阅读", "评论", "收藏", "链接", "热度"]
hot_rank

image-20211024183404728

这样我们就获取热榜100条的所有数据了。

就是这么简单,童鞋们都再也不用担心不会采集热榜了。

  • 187
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 166
    评论
### 回答1: 好的,下面是一个使用Python编写的抢票脚本示例,它可以自动刷新页面并检查是否有票可用,如果有就自动预订票: ```python import time from selenium import webdriver # 设置抢票网站的URL和要抢的票数 url = 'http://www.12306.cn/mormhweb/' num_tickets = 2 # 初始化浏览器 driver = webdriver.Chrome() # 打开网页并等待一段时间 driver.get(url) time.sleep(5) # 找到输入起始站和终点站的文本框,并输入站点信息 start = driver.find_element_by_id('fromStationText') start.clear() start.send_keys('北京') end = driver.find_element_by_id('toStationText') end.clear() end.send_keys('上海') # 找到输入日期的文本框,并输入日期信息 date = driver.find_element_by_id('train_date') date.clear() date.send_keys('2022-02-01') # 找到查询按钮,并点击它 query_button = driver.find_element_by_id('query_ticket') query_button.click() # 等待查询结果加载完成 time.sleep(5) # 找到所有车次信息的元素 train_infos = driver.find_elements_by_css_selector('#queryLeftTable tbody tr') # 遍历每个车次信息,查找可用的车票 for info in train_infos: # 找到车次编号和余票信息的元素 train_number = info.find_element_by_css_selector('td:nth-child(1)').text ticket_info = info.find_element_by_css_selector('td:nth-child(13)').text # 如果有可用的车票,就预订车票 if ticket_info != '无' and ticket_info != '--': print('发现可用车票:', train_number, ticket_info) # 找到预订按钮,并点击它 book_button = info.find_element_by_css_selector('td:nth-child(13) a') book_button.click() # 等待预订页面加载完成 time.sleep(5) # 找到提交订单按钮,并点击它 submit_button = driver.find_element_by_id('submitOrder_id') submit_button.click() # 等待确认订单页面加载完成 time.sleep(5) # 找到确认按钮,并点击它 confirm_button = driver.find_element_by_id('qr_submit_id') confirm_button.click() # 等待确认页面加载完成 time.sleep(5) # 打印预订成功信息 print('恭喜,成功预订了', num_tickets, '张', train_number, '的车票!') break # 关闭浏览器 driver.quit() ``` 这个脚本使用了Selenium库来自动化浏览器操作,从而实现抢票功能。它的主要思路是先打开抢票网站,输入出发站、到达站和日期等信息,然后查询可用车票,如果有就预订车票。注意,这个脚本仅作为示例,请勿用于非法目的。 ### 回答2: 抢票功能的脚本是通过模拟用户在大麦网上的操作来实现的。下面我将给出一个简单的示例脚本。 首先,脚本需要导入必要的模块,比如selenium和time。然后,需要设置网站地址、票务信息和等待时间等参数。 接下来,通过selenium库创建一个浏览器实例,并打开大麦网。可以使用对应的URL或XPath来定位元素。比如,可以用driver.find_element_by_xpath方法定位到票务选择按钮,然后使用.click()来模拟点击操作。 为了提高抢票成功率,可以使用time模块设定适当的等待时间。例如,在选择票务后,可以使用time.sleep方法暂停几秒钟,让网页加载完成。 在购票页面,脚本需要填写用户相关信息,比如姓名、手机号码等。可以通过driver.find_element_by_id或driver.find_element_by_name来定位并输入相关信息。 最后,需要在脚本中添加点击购买按钮的代码,模拟用户的确认操作,同样可以使用.click()方法来实现。 整个脚本的原理是通过模拟用户在网页上的操作,完成选择票务、填写信息和点击购买等步骤,最终实现抢票功能。 然而,值得注意的是,大麦网等票务网站为了减少恶意抢票行为,可能会采取一些反抢票的措施,如验证码、登录限制等。因此,编写可靠的抢票脚本可能需要更复杂的处理和克服这些限制。建议在实际应用中,遵循网站规则和道德准则使用脚本。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小明-代码实体

喜欢,就关注;爱,就打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值