抓取文章的链接,访问量保存到本地

 #coding=utf-8
import requests as req
import re
import urllib
from bs4 import BeautifulSoup
import sys
import codecs
import time r=req.get('https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000',
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'})
content=r.text
#print(content)
soup=BeautifulSoup(content,'html.parser') #下面2行内容解决UnicodeEncodeError: 'ascii' codec can't encode characters in position 63-64问题,但是加了后print就打印不出来了,需要查原因
reload(sys)
sys.setdefaultencoding('utf-8') i=0
for tag in soup.find_all(re.compile(r'^a{1}'),{'class':'x-wiki-index-item'}):
i=i+1
if i%3==0:
time.sleep(30)
name=tag.get_text()
href='https://www.liaoxuefeng.com'+tag['href']
req2=req.get(href,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'})
time.sleep(3)
soup2=BeautifulSoup(req2.text,'html.parser')
count=soup2.find_all('div',{'class':'x-wiki-info'})
try:
co=count[0].find('span').get_text()
co=co[7:]
except IndexError as e:
co=''
with open('E:/sg_articles.xlsx', 'a+') as f:
f.write(codecs.BOM_UTF8)#解决写入csv后乱码问题
f.write(name+','+href+','+co+'\n')
'''
睡眠是因为网页访问过多就会报503 Service Unavailable for Bot网站超过了iis限制造成的由于2003的操作系统在提示IIS过多时并非像2000系统提示“链接人数过多”
http://www.51testing.com/html/53/15150753-4455790.html --数据可视化
http://www.cnblogs.com/xxoome/p/5880693.html --python引入模块时import与from ... import的区别
https://www.cnblogs.com/amou/p/9184614.html --讲解几种爬取网页的匹配方式
https://www.cnblogs.com/yinheyi/p/6043571.html --python基本语法
'''

上面代码的思路:先获取主网页,再遍历主网页上的文章链接并请求这些链接以进入子网页,从而获得子网页中span标签保存的访问量。

下面打开本地文件,pandas进行数据分析,然后pyecharts实现图形化

 #coding=utf-8
from pyecharts import Bar
import pandas as pd p=pd.read_excel('E:\sg_articles.xls',names=["title","href","count"])
a=p.sort_values(by='count',ascending=False)[0:3]
title=a['title']
count=a['count']
bar=Bar("点击量TOP3", title_pos='center', title_top='', width=800, height=400)
bar.add("", title, count, is_convert=True, xaxis_min=10, yaxis_rotate=30, yaxis_label_textsize=10, is_yaxis_boundarygap=True, yaxis_interval=0,
is_label_show=True, is_legend_show=False, label_pos='right',is_yaxis_inverse=True, is_splitline_show=False)
bar.render("E:\点击量TOP3.html")

最后的结果

同时还有很多疑问,需要懂的朋友帮忙解答:

1.第一段代码中保存的xlsx格式,实际保存后打开是提示有损坏的,使用xml打开则就没有问题,另存为xls格式后打开也没有问题

2.访问量过多会报错,我就利用了sleep,但实际上访问量间断性的读取到了值,有的为什么读不到值了?

3.利用sort_values对count列进行排序取前3,这个会自动排除掉excel表格的第一行,不知道是为什么

感觉后面我还需要强化1)pandas数据处理的方法,比如分组排序等

2)正则表达式的提取

3)pyecharts的图形绘制

4)在遇到网页有反爬情况下的虚拟ip设置等

记录我的python学习之路,大家一起努力哟~~

最新文章

  1. Makefile的编写
  2. 关于SVN出现 svn working copy locked的原因及解决方法
  3. CSS选择器 转
  4. Matlab的部分文件操作
  5. Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
  6. 关于C中struct和union长度的详解
  7. 基于HTML5的Web跨设备超声波通信方案
  8. @valid表单验证demo
  9. clojure
  10. 【Shell脚本学习1】Shell简介:什么是Shell,Shell命令的两种执行方式
  11. 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决办法
  12. poj 1503 大数相加(java)
  13. C++ 可以多个函数声明
  14. 重读The C programming Lanuage 笔记二:运算符优先级
  15. Linux Redis集群搭建与集群客户端实现
  16. SSM-SpringMVC-13:SpringMVC中XmlViewResolver视图解析器
  17. centos7下安装docker(13.4容器volume总结)
  18. sublime text3支持Vue文件高亮显示
  19. Java库中的集合
  20. servlet生成验证码代码

热门文章

  1. SQLServer 2008 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。
  2. Java的注解总结
  3. 啊哈算法第四章第三节 层层递进-广度优先搜索 java实现
  4. Tomcat 启动时 SecureRandom 非常慢解决办法,亲测有效
  5. [Go] 开始试探一门新语言的五点思考 - Golang
  6. Suse linux enterprise 11安装时更改磁盘模式为gpt的方法
  7. Adobe Flash player ActiveX下载地址
  8. CSS 布局术语
  9. tornado 基于MongoDB存储 session组件开发
  10. keil5一点project就闪退