- Python爬虫基础——HTML、CSS、JavaScript、JQuery网页前端技术
- Python爬虫基础——正则表达式
- Python爬虫基础——re模块的提取、匹配和替换
- Python爬虫基础——XPath语法的学习与lxml模块的使用【CSDN】
- Python爬虫进阶——JsonPath使用案例
- Python爬虫进阶——urllib模块使用案例【淘宝】
- Python爬虫进阶——Request对象之Get请求与URL编码【英雄联盟吧】
- Python爬虫进阶——Request对象之post请求案例分析【百度翻译】
- Python爬虫实战—— Request对象之header伪装策略
- Python爬虫实战——反爬策略之代理IP【无忧代理】
- Python爬虫实战——反爬策略之模拟登录【CSDN】
- Python爬虫实战——反爬机制的解决策略【阿里】
- Python爬虫总结——常见的报错、问题及解决方案
这一次呢,让我们来试一下“CSDN热门文章的抓取”。
话不多说,让我们直接进入CSND官网。
(其实是因为我被阿里的反爬磨到没脾气,不想说话……)
一、URL分析
输入“Python”并点击搜索:
便得到了所有关于“Python”的热门博客,包括 [ 标题,网址、阅读数 ] 等等,我们的任务,就是爬取这些博客。
分析一下上图中曲线处的URL,不难发现:p为页数,q为关键字。
二、XPath路径
打开开发者模式,匹配我们所需信息的标签:
- 通过
//dd[@class='author-time']/span[@class='link']/a/@href
匹配各个博客的URL地址;
- 通过
//h1[@class='title-article']/text()
匹配各个博客的标题。
注意:
对于XPath路径有疑问的话,可复习《XPath语法的学习与lxml模块的使用》。
三、代码实现
- 定制输入框:
keyword = input("请输入关键词:")
pn_start = int(input("起始页:"))
pn_end = int(input("终止页:"))
- 确定URL:
# 注意要+1
for pn in range(pn_start, pn_end+1):
url = "https://so.csdn.net/so/search/s.do?p=%s&q=%s&t=blog&viparticle=&domain=&o=&s=&u=&l=&f=&rbg=0" % (pn, keyword)
- 构建request对象:
# 返回request对象
def getRequest(url):
return ur.Request(
url=url,
headers={
'User-Agent': user_agent.get_user_agent_pc(),
}
)
for pn in range(pn_start, pn_end+1):
url = "https://so.csdn.net/so/search/s.do?p=%s&q=%s&t=blog&viparticle=&domain=&o=&s=&u=&l=&f=&rbg=0"