requests爬取get\post网页及二级链接网页

本文详细介绍了使用Python的Requests库进行网页爬取的方法,包括如何分析网页请求方式、设置headers和data参数,以及如何处理二级链接和反爬虫策略。通过实例展示了GET和POST请求的代码实现,并提供了网页内容筛选和数据库存储的基本流程。

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

requests爬取网页及二级链接网页

相对于scrapy+selenium,真正上班了才发现requests是真的好用,简便快捷,不需要配置一大堆的东西,即写即用,但是有些被设置了很复杂的反爬虫网页的时候,selenium的click()方法是真的好用T.T

requests获取网页

#首先import
import requests,time,re,json

首先要先分析网页,用chrome的f12,在network里查看点击下一页啊,点开网站都是用的什么方法。然后首先

url = '你要爬取的网页'
for i in range(1, page+1)
#page+1等于页数
print('第{}页'.format(i)) 
headers= {
	 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
        "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
      #就写这么几个,需要的百度
data = {
	#分析网页的时候就会发现是post还是get方法,如果是get方法不需要写data
	#例如
	'pageIndex' = i,
	'citycode' = '20000'
}
#未经筛选的get方法网页源码
un_content = request.get(url, headers=headers).content.decode('utf-8')..replace('\t', '').replace('\r', '').replace('\n', '')
time.sleep(1)
#post
un_content = requests.post(url, data=data).content.decode('utf-8')..replace('\t', '').replace('\r', '').replace('\n', '')
time.sleep(1)
content = re.findall(r'按照你需要的内容进行筛选', un_content)
for info in content:
	try:
		url_inside = '你从一级链接获取的url'
		#继续get
		inside_url = requests.get
		find_duplicated = #检查重复函数
		if find_duplicated == None:
			存入数据库或者输出等~
	except Exception as e:
		print(e)
大概就是这样一个流程,下一个写遇到json加密的网页怎么办
### 如何用Python爬虫抓取微博评论及二级回复数据 #### 使用API接口方式抓取微博评论及其二级回复 为了有效获取完整的微博评论以及其对应的二级回复,推荐使用官方或第三方提供的API接口来代替直接从网页端提取数据[^3]。这种方式能够绕过许多前端展示上的限制,并且可以更稳定地获得大量数据。 对于具体的实现方法,在构建请求时需要注意设置合理的参数以确保能接收到所需的全部信息: - `max_id` 参数用于分页加载更多评论; - 特定于某些版本的 API 可能还支持传递 `since_id` 来指定起始位置; - 对于二级回复,则通常需要额外发起针对单条评论ID的新一轮查询调用来取得子级留言列表。 下面给出一段简单的代码片段作为示范,展示了如何利用API接口进行此类操作: ```python import requests from tqdm import tqdm def fetch_comments(api_url, post_id, max_count=1000): comments = [] has_more = True max_id = 0 while has_more and len(comments) < max_count: params = { 'id': post_id, 'count': min(200, max_count - len(comments)), # 单次最大数量不超过200 'max_id': str(max_id), 'is_hot': '1' # 获取热门评论优先 } response = requests.get(url=api_url, params=params).json() new_comments = response['data']['data'] if not new_comments or ('ok' in response and not response['ok']): break comments.extend(new_comments) has_more = bool(response['data'].get('hasmore')) max_id = int(response['data']['max_id']) return comments[:max_count] def fetch_replies(api_reply_url, comment_id, max_count=50): replies = [] page = 1 while len(replies) < max_count: params = {'cid': comment_id, 'page': page} response = requests.get(url=api_reply_url, params=params).json() try: current_page_data = response['data']['replies'] or [] replies.extend(current_page_data) total_pages = response['data']['total_number'] // 20 + (response['data']['total_number'] % 20 > 0) if page >= total_pages or len(current_page_data) == 0: break page += 1 except KeyError as e: print(f"Error fetching reply data: {e}") break return replies[:max_count] # 示例:假设已知某条微博的文章ID为'post_example' comments_list = fetch_comments("https://example.com/api/comments", "post_example") for cmt in tqdm(comments_list, desc="Processing Comments"): replies_to_comment = fetch_replies("https://example.com/api/reply", cmt["comment_id"]) ``` 请注意以上URL仅为示意用途,请替换为实际可用的服务地址。此外,由于微博平台可能会不断更新其安全策略和服务条款,因此建议定期关注最新的开发者文档并调整相应逻辑以适应变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值