python3 requests 动态网页post提交数据

本文介绍如何使用Python的requests库登录清博大数据网站并爬取特定关键词的微信文章。通过解决post请求无响应的问题,成功获取到了文章数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.登录清博大数据网站(http://www.gsdata.cn/)(想采集微信文章的可以来这里)

import requests
import json

conn = requests.session()
# 登录
url = 'http://www.gsdata.cn/member/login'
postdata = {
    'username': '******',
    'password': '******'
}
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5733.400 QQBrowser/10.2.2019.400'}
rep = conn.post(url, data=postdata, headers=headers)

2.采集文章

输入关键词后,会在本页面返回文章条数,然后我是正常post数据,没有任何结果,然后网上也查不到问题。

原代码:

ajax_header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5733.400 QQBrowser/10.2.2019.400'}

# 搜索
arcsearch = 'http://www.gsdata.cn/tool/ajaxarccount'
searchdata = {
    'keyword': '人工智能',
    'copyright': 0,
    'title': '标题',
    'content': '摘要',
    'wx': '微信号',
    'startTime': '2018-01-01',
    'endTime': '2018-01-31',
}

search = conn.post(arcsearch, data=searchdata, headers=ajax_header)
print(search.json())

然后我发现它与静态网页头部Request Headers多出了X-Requested-With

所以我在头部也加了'X-Requested-With': 'XMLHttpRequest'

代码:

ajax_header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5733.400 QQBrowser/10.2.2019.400',
               'X-Requested-With': 'XMLHttpRequest'}

# 搜索
arcsearch = 'http://www.gsdata.cn/tool/ajaxarccount'
searchdata = {
    'keyword': '人工智能',
    'copyright': 0,
    'title': '标题',
    'content': '摘要',
    'wx': '微信号',
    'startTime': '2018-01-01',
    'endTime': '2018-01-31',
}

search = conn.post(arcsearch, data=searchdata, headers=ajax_header)
print(search.json())

结果

### 使用Python发送POST请求抓取动态加载的网页内容 对于动态加载的内容,传统的`urllib`或`requests`可能无法直接获取完整的页面内容[^2]。为了克服这一挑战并成功抓取由JavaScript动态渲染的数据,可以采用多种策略。 #### 方法一:利用Selenium模拟浏览器行为 Selenium是一个强大的工具,能够自动化Web浏览器操作。它支持与真实的浏览器交互,因此非常适合处理依赖于JavaScript执行来显示其全部内容的网站。通过设置WebDriver等待特定HTML元素出现,确保页面完全加载后再提取所需信息[^3]。 ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.PhantomJS() # 或者使用其他驱动如ChromeDriver try: driver.get('目标URL') # 填写表单字段 element = driver.find_element(By.NAME, 'username') element.send_keys('your_username') # 提交表单或者触发AJAX事件 submit_button = driver.find_element(By.ID, 'submit-button-id') submit_button.click() # 显式等待直到某个条件满足(比如新元素可见),这里假设有一个ID为result-data的div标签用来装载最终结果 result_div = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "result-data")) ) finally: data = result_div.text # 获取文本或其他属性 print(data) driver.quit() ``` 这种方法的优点是可以精确控制页面上的每一个动作,并且能很好地应对复杂的前端逻辑;缺点则是性能相对较低,因为每次都需要启动整个浏览器实例来进行测试/抓取工作。 #### 方法二:分析网络流量并构建自定义HTTP POST请求 如果目标站点提供了API接口或者是可以通过观察开发者工具中的Network面板找到规律性的POST请求模式,则可以直接模仿这些请求向服务器提交数据而不必打开实际的浏览器窗口。这种方式效率更高也更隐蔽一些。 ```python import requests url = 'https://example.com/api/data' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Content-Type': 'application/x-www-form-urlencoded', } form_data = {'key1': 'value1', 'key2': 'value2'} response = requests.post(url=url, headers=headers, data=form_data) if response.status_code == 200: json_result = response.json() print(json_result) else: print(f"Error occurred: {response.status_code}") ``` 此代码片段展示了如何创建一个简单的POST请求,其中包含了必要的头部信息(`headers`)以及表单数据(`form_data`)。当接收到成功的响应时,解析返回的JSON对象以访问所需的动态内容[^1]。 无论选择哪种方式,在开发过程中都应遵循道德准则和技术规范,尊重对方服务条款,合理合法地进行数据采集活动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值