使用python爬取csdn博客访问量

本文介绍如何使用Python进行CSdn博客的爬虫操作,并详细解析如何从爬取的网页中提取博客标题和访问量信息。通过正则表达式匹配网页源码,实现自动化数据抓取。
# -*- coding: utf-8 -*-


import urllib2
import re

#当前的博客列表页号
page_num = 1
#不是最后列表的一页,如果有尾页说明不是最后一页
notLast = 1

account = "mrzhang628"

#首页地址
baseUrl = 'http://blog.youkuaiyun.com/'+account

while notLast:
	#连接页号,组成爬取的页面网址
	myUrl = baseUrl+'/article/list/' + str(page_num)

	#伪装成浏览器访问,直接访问的话csdn会拒绝
	user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; windows NT)'
	headers = {'User-Agent':user_agent}
	#构造请求
	req = urllib2.Request(baseUrl,headers=headers)

	#request = urllib2.Request(myUrl);
	#request.add_header(headers);	

	#print("req = ",str(req));

	#访问页面
	try:
		myResponse = urllib2.urlopen(req) #timeout用来设置超时
	except Exception, e:
		raise
	else:
		pass #Python pass是空语句,是为了保持程序结构的完整性。
	finally:
		pass


	myPage = myResponse.read()

	#print("notLast = " ,str(notLast));

	print '-----------------------------第%d页---------------------------------' % (page_num,)

	#利用正则表达式来获取博客的标题
	titles = re.findall('<span class="link_title"><a href=".*?">(.*?)</a></span>',myPage,re.S)	
	titleList=[] #表用[ ]标识。是python最通用的复合数据类型
	for items in titles:
		titleList.append(str(items).lstrip().rstrip())#list.append(obj):在列表末尾添加新的对象

	#利用正则表达式获取博客的访问量
	views = re.findall('<span class="link_view".*?><a href=".*?" title="阅读次数">阅读</a>\((.*?)\)</span>',myPage,re.S)
	viewList=[]
	for items in views:
		viewList.append(str(items).lstrip().rstrip()) 


	#这里相当于创造一个迭代器
	index = []
	count = 0
	while (count < len(viewList)):
		index.insert(count,count)
		count = count + 1
	
	print(index)
	
	#将结果输出 
	for n in index: #range(len(titleList)):
		print '访问量:%s 标题:%s' % (viewList[n].zfill(4),titleList[n])

	#页号加1
	page_num = page_num + 1

	#在页面中查找是否存在‘尾页’这一个标签来判断是否为最后一页
	notLast = re.findall('<a href=".*?">尾页</a>',myPage,re.S)


有问题请及时交流学习,谢谢!

### 实现优快云网站信息爬取 为了实现对优快云网站的信息爬取,可以利用`requests`库发送HTTP请求并获取页面内容,再借助`BeautifulSoup`解析HTML文档结构。对于更复杂的交互逻辑或动态加载的内容,则可能需要用到Selenium这样的工具模拟浏览器行为。 #### 准备工作 安装必要的Python库: ```bash pip install requests beautifulsoup4 pandas selenium openpyxl ``` #### 发送HTTP请求 构建一个简单的函数来发起GET请求,并处理可能出现的异常情况[^2]。 ```python import requests from bs4 import BeautifulSoup def fetch_page(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } try: resp = requests.get(url, headers=headers) if resp.status_code == 200: return resp.text else: print(f"Failed to load page {url}, status code: {resp.status_code}") return None except Exception as e: print(f"Error occurred while fetching URL {url}: ", str(e)) return None ``` #### 解析网页内容 定义另一个辅助方法用于提取所需字段,比如文章标题、类别、创建时间和阅读量等信息[^1]。 ```python def parse_article_info(html_content): soup = BeautifulSoup(html_content, "html.parser") articles = [] article_elements = soup.select('.article-item-box') for element in article_elements: title = element.find('h4').get_text(strip=True) category = element.select_one('.category').get_text(strip=True) if element.select_one('.category') else '' created_at = element.select_one('.date').get_text(strip=True) read_count = int(element.select_one('.read-num').get_text().replace('阅读数:', '').strip()) articles.append({ 'title': title, 'type': category, 'created_time': created_at, 'reads': read_count }) return articles ``` #### 存储到Excel文件 最后一步是将收集到的数据导出成Excel表格格式以便后续查看和分析[^3]。 ```python import pandas as pd def save_to_excel(data_list, filename='output.xlsx'): df = pd.DataFrame(data_list) with pd.ExcelWriter(filename, engine='openpyxl', mode='w') as writer: df.to_excel(writer, index=False) if __name__ == '__main__': target_url = 'https://blog.csdn.net/some_user_id/article/list' html_data = fetch_page(target_url) if html_data is not None: parsed_articles = parse_article_info(html_data) save_to_excel(parsed_articles, './csdn_articles.xlsx') print("Data has been successfully saved.") ``` 此脚本会访问指定用户的个人主页链接(需替换为实际的目标URL),从中抽取公开发布的每篇文章的相关元数据,并最终把这些记录整理好存入本地磁盘上的Excel电子表单里。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值