世界1024年程序猿节日不加班,闲着没事儿……随手写了个播客访问量爬虫玩玩,访问量过万不是事儿! ! !每个步骤注释都很清晰,代码仅供学习参考!
——Nick.Peng
Python3。x
相关模块:请求,json, lxml, urllib, bs4, fake_useragent
# !/usr/bin/env python # - * -编码:utf - 8 - * # @Author:尼克 # @Date: 2019-10-24 15:40:58 # @Last修改:尼克 # @Last修改时间:2019-10-24 16:54:31 进口随机 进口再保险 导入的时间 进口urllib 进口的要求 从bs4进口BeautifulSoup 从fake_useragent进口UserAgent 试一试: 从lxml进口etree 除了例外e: 进口lxml.html #实例化一个etree对象(解决通过从lxml进口etree导包失败) etree=lxml.html.etree #实例化UserAgent对象,用于产生随机UserAgent ua=UserAgent () 类BlogSpider(对象): ”“” CSDN的博客访问量的增加。 ”“” def __init__(自我): 自我。url=" https://blog.csdn.net/PY0312/article/list/{}” 自我。头={ “推荐人”:“https://blog.csdn.net/PY0312/? “用户代理”:ua.random } 自我。firefoxHead={ “用户代理”:“Mozilla/5.0 (Windows NT 10.0;Win64;x64;房车:Firefox 61.0)壁虎/20100101/61.0”} 自我。IPRegular=r”(((1 - 9) & # 63; \ d | 1 \ d {2} | 2 (0 - 4) \ d | 25 (0 - 5))) {3} ((1 - 9) & # 63; \ d | 1 \ d {2} | 2 (0 - 4) \ d | 25 (0 - 5))” def send_request(自我,num): ”“” 模拟浏览器发起请求 :param num: num 返回:html_str ”“” html_str=requests.get (self.url.format ( num),标题=self.headers) .content.decode () #打印(html_str) 返回html_str def parse_data(自我,html_str): ”“” 用于解析发起请求返回的数据 :param html_str: 返回:each_page_urls ”“” #将返回的html字符串转换为元素对象,用于xpath操作 element_obj=etree.HTML (html_str) #打印(element_obj) #获取每一页所有博客的url each_page_urls=element_obj.xpath ( '//* [@ id=" mainBox "]/主/div [2]/div/h5//@href”) #打印(each_page_urls) 返回each_page_urls def parseIPList(自我,url=" http://www.xicidaili.com/"): ”“” 爬取最新代理ip、西刺代理 注意:西刺代理容易被封,如遇到IP被封情况,采用以下两种方法即可解决: 方法一:请参考我上一篇博客《Python实现快代理IP爬虫》===比;喜欢研究的同学,可参考对接此接口 方法二:直接屏蔽掉此接口,不使用代理也能正常使用 :param url:“http://www.xicidaili.com/? 返回:代理IP列表ips ”“” ips=[]=urllib.request请求。请求(url,标题=self.firefoxHead) 响应=urllib.request.urlopen(请求) 汤=BeautifulSoup(回应,“lxml”) tds=soup.find_all (“td”) td的tds: 字符串=str (td.string) 如果re.search(自我。IPRegular字符串): ips.append(字符串) #打印(ips) 返回“诱导多能性” def主要(自我、total_page loop_times each_num): ”“” 调度方法 :param total_page:设置博客总页数 :param loop_times:设置循环次数 :param each_num:设置每一页要随机挑选文章数 返回: ”“” 我=0 #根据设置次数,打开循环 虽然我& lt;loop_times: #遍历,得到每一页的页码 j的范围(total_page): #拼接每一页的url,并模拟发送请求,返回响应数据 html_str=自我。send_request (j + 1) #解析响应数据,得到每一页所有博文的url each_page_urls=self.parse_data (html_str) #调用parseIPList随机产生代理IP、防反爬 # ips=self.parseIPList () #代理={“http”:“{}: 8080”.format ( # ips(随机的。randint (0, 40)])} #遍历,每一页随机挑选each_num篇文章 x的范围(each_num): #随机抽取每一页的一篇博文进行访问,防反爬 current_url=random.choice (each_page_urls) 状态=True如果requests.get ( 其他current_url header=self.headers) .content.decode()错误的 打印(“当前正在访问的文章是:{},访问状态:{}”。格式(current_url、状态) time . sleep(1) #延时1秒,防反爬 time . sleep(1) #延时1秒,防反爬 我+=1 if __name__==癬_main__”: b=BlogSpider () bs。主要(200 3)#参数参照主要方法说明,酌情设置Python爬虫实现增加播客访问量的方法实现