requests库在爬虫的实践开发运用中较为常用,实现HTTP请求协议时方法简单,操作方便,易于实现。对于一般的静态网页,都可以方便抓取想要的内容,比起scrapy等框架有明显的优势,爬取定向的简单内容,是极好的。
下面就是运用requests模块,实现一个简单的爬取贴吧网页的爬虫程序。该栗子创建一个类,方便有需要时直接调用继承。
闲言少叙,上菜!!!接代码!!!
看着代码挺多,去掉注释,所剩无几,这也是python魅力所在,哈哈哈!!!
import requests
class Tiebaspider:
def __init__(self,tieba_name_crawl):
#初始化必要参数,完成基础的设置
#贴吧名称
self.tiebaname = tieba_name_crawl
#种子链接
self.url_base = 'https://tieba.baidu.com/f?kw='+ tieba_name_crawl +'&ie=utf-8&pn={}'
#请求头信息
self.hearders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0'}
#获得要的页面下载列表
def make_list_down(self):
#列表生成式 返回值是下载链接,带有页码
# return [self.url_base.format(i) for i in range(3)]
#注意注意注意!!!贴吧的源码HTML是50条翻一页,pn=50,想要获得第二页pn值要大于50,依次类推
return [self.url_base.format(i) for i in [0,55,102]]
#获得下载的页面内容
def download_url(self,url_str):
#获得页面请求响应 使用request.get方法下载指定页面,并返回页面的结果
#url_str下载链接
result = requests.get(url_str,headers =self.hearders)
# print(result.text)
#返回下载的页面内容
return result.content
#保存下载的内容
def save_result(self,result,page_num):
#路径(相对/绝对都可以)
file_path = 'D:/4spider/spider_review02/review02/download2/{}--第{}页.html'.format(self.tiebaname,page_num)
with open(file_path,'wb') as f:
f.write(result)
#执行逻辑,程序执行的顺序
def run(self):
#调用make_list_down()方法
url_list = self.make_list_down()
#url_str在url_list中 循环遍历
for url_str in url_list:
#调用download_url() 方法
result_str = self.download_url(url_str)
#页码 索引值在获得的页码列表中 循环加1
p_num = url_list.index(url_str) + 1
#调用save_result()方法保存,保存下载的页面
self.save_result(result_str,p_num)
if __name__ =="__main__":
#“李毅”要爬取的贴吧名称
tieba_spider = Tiebaspider("李毅")
tieba_spider.run()
注意点:::
1.学好爬虫的前提HTML页面要666,对css,js,json,ajax等前端页面的知识要会分析;比如此例中,要对贴吧源代码进行分析,查看下一页的样式,不然无法实现翻页功能,也就是只能获得第一页;
2.分析这种简单爬虫时,要从run方法入手,它是程序的主要实现逻辑;
3.保存的路径必须是程序能够找到的路径;
4.最好运用面向对象的方法来解决问题,创建类,封装函数,也就是造轮子,方便下次要实现类似的需求时,作为参考。