我们如何爬取这50条热搜呢?今天写一个简单的方法供感兴趣的朋友们参考!

引用库:

requests

json

lxml.etree

bs4.BeautifulSoup引用方法如下:

如果没有下载的需要自行下载,下载根据python版本而异,方法就不赘述了。

获取网页源码:headers={

'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'

}

data = {

'cate':'realtimehot'

}

try:

r = requests.get('http://s.weibo.com/top/summary?',params=data,headers=headers)

print(r.url)

if r.status_code == 200:

html = r.text

except:

html = ""User-Agent根据自己浏览器的控制台去查看一下就行,源码保存在html中。

lxml解析:这里主要用到lxml中的etree包,其中xpath方法可以获取到包括script这样的节点。我们查看这个热搜榜网页的源码,可以发现详细的列表内容并没有写在静态页面中,而是写在script中,如图

也就是说,我们需要解析到script中的这段代码,从中提取有用的信息

这里我用两种方法来解析,一种是BeautifulSoup,另一种是lxml。代码如下def parseMethod(id,html):

if id == 'bs':

soup = BeautifulSoup(html,'lxml')

sc = soup.find_all('script')[14].string

start = sc.find("(")

substr = sc[start+1:-1]

text = json.loads(substr)#str转dict

rxml = text["html"]#打印dict的key值,包含pid,js,css,html

soupnew = BeautifulSoup(rxml,'lxml')

tr = soupnew.find_all('tr',attrs={'action-type':'hover'})

elif id == 'lxml':

selector = etree.HTML(html)

tt = selector.xpath('//script/text()')

htm = tt[8]

start = htm.find("(")

substr = htm[start+1:-1]

text = json.loads(substr)#str转dict

rxml = text["html"]#打印dict的key值,包含pid,js,css,html

et = etree.HTML(rxml)

tr = et.xpath(u'//tr[@action-type="hover"]')

else:

pass

return tr根据传入的id选择不同的解析方式,两种方法都不难,应该很容易看懂,简单描述就是:

先获取含有realtimehot的script(到源码中去数第几个,在bs中是第16个,lxml中是10个,因为xpath选了text(),有的空标签的就过滤掉了,因此只有10个)

对script的字符串进行索引,找到“(”的位置,然后提取()内的子串

用json.loads()把字符串解析为字典,共有pid,js,css,html四个键

提取key为html的value值,然后再用bs或者lxml解析一次

提取

标签存入list

写入txt:def lxmldata(tr):

for t in tr:

id = eval(t.find(u".//td[@class='td_01']").find(u".//em").text)

title = t.find(u".//p[@class='star_name']").find(u".//a").text

num = eval(t.find(u".//p[@class='star_num']").find(u".//span").text)

yield {

'index' : id,

'title' : title,

'num' : num

}

def bsdata(tr):

for t in tr:

id = eval(t.find('em').string)

title = t.find(class_='star_name').find('a').string

num = eval(t.find(class_='star_num').string)

yield {

'index' : id,

'title' : title,

'num' : num

}

def output(id,tr):

with open("weibohotnews.txt","w",encoding='utf-8') as f:

if id == 'bs':

for i in bsdata(tr):

f.write(str(dict(i))+'n')

elif id == 'lxml':

for i in lxmldata(tr):

f.write(str(dict(i))+'n')

else:

pass同样根据id来选择解析方式,两种方法也都很清楚,去不同的位置获取需要的值就OK。

最后写一个main函数,调用以上方法,如下def main():

url = 'http://s.weibo.com/top/summary?'

method = 'lxml'

html = input(url)

tr = parseMethod(method,html)

output(method,tr)

main()

结果:

python爬取微博热搜显示到折线图_Python爬取新浪微博热搜榜-Go语言中文社区相关推荐

  1. python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...

    一.设计方案 1.主题式网络爬虫名称:微博热搜榜前20信息数据爬取进行数据分析与可视化 2.爬取内容与数据特征分析:爬取微博热搜榜前20热搜事件.排名与热度,数据呈一定规律排序. 3.设计方案概述:思 ...

  2. go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...

    利用splash爬取京东商品信息 一.环境 window7 python3.5 pycharm scrapy scrapy-splash MySQL 二.简介 为了体验scrapy-splash 的动 ...

  3. php微博cookie获取,python模拟新浪微博登陆之获取cookies-Go语言中文社区

    首先感谢敲代码的耗子,之前一直搞不懂登陆新浪微博的原理,看了他那篇文章之后,终于明白了基本原理.在这里主要是通过代码实现那篇文章的过程. 获取网页使用的包是requests,正则匹配用的是re,其他需 ...

  4. python公众号开发框架_Python的WeRoBot框架开发公众号-Go语言中文社区

    最终的效果图: 完整代码: #coding:utf-8 # Filename:return_message5.py # 被关注回复'Hello World!' # 收到 笑话 回复糗百笑话,收到收到 ...

  5. python制作表白神器_python制作exe可执行表白神器-Go语言中文社区

    1.效果图 2.程序源码 import turtle import time #writing txt turtle.hideturtle() turtle.penup() turtle.goto(1 ...

  6. python批量pdf转word_Python:PDF批量转Worde+PDF图片快速提取(附源代码)-Go语言中文社区...

    在日常生活中我们常常会用到PDF格式的文档,这种格式虽然阅读方便,但我们通常无法修改PDF里面的内容,如果想要修改的需要把PDF转成Word形式.除此之外,PDF字间距较大,如果完整打印下来会花费不少 ...

  7. python情人节之玫瑰花与表白方式_python情人节之玫瑰花与表白方式-Go语言中文社区...

    import turtle def initialization(): ''' 初始化画布和画笔 ''' turtle.setup(width=0.9, height=0.9) turtle.spee ...

  8. Python使用matplotlib可视化多个不同颜色的折线图、通过FontProperties为可视化图像配置中文字体可视化、并指定字体大小

    Python使用matplotlib可视化多个不同颜色的折线图.通过FontProperties为可视化图像配置中文字体可视化.并指定字体大小 目录

  9. python爬取微博评论超100页_python爬取新浪微博评论-Go语言中文社区

    简介 爬取微博m站评论.由于api限制只能爬取前100页,如果想要更全数据需爬pc端. 工具 python 3.5 requests库 re库 步骤 1. 登陆保存cookie 首先,打开m.weib ...

最新文章

  1. html中item属性,项目id(属性) | itemid (attribute)
  2. A - Wireless Network POJ - 2236
  3. Python中DataFrame关联
  4. UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
  5. af_netlink_Linux Netlink通信机制详解(上)
  6. python脚本运行命令_从Python脚本运行shell命令
  7. LLVM每日谈之一 LLVM是什么
  8. 基于流程的多维度企业管理框架(第三稿)
  9. 手机操作系统学习总结
  10. stm32mp1 Cortex M4开发篇6:TIM定时器中断
  11. TCPUDP测试工具
  12. Chorme浏览器中安装Axure插件的方法
  13. Pandas库下载和安装
  14. JsoupSample,使用 Jsoup 抓网页,项目抓取了小说,图片,影视几个网站的信息
  15. 天宫初级认证答案_百度初级认证考试题(附答案)
  16. java 依赖倒置_Java设计原则—依赖倒置原则(转)
  17. SPA单页面首屏加载慢怎么解决???
  18. react-Suspense工作原理分析
  19. SSD固态硬盘怎么选?选对接口是关键
  20. Android Google Services Framework Google Play

热门文章

  1. 质因子分解 Python
  2. mysql netcdf_NetCDF官方读写终端ncdump和ncgen的用法
  3. Access 查询的IIF的写法
  4. 周训练计划之(韦德分化训练法:胸、肩、背、腿、腹)
  5. html表格里面怎么合并单元格的快捷键,excel合并单元格快捷键是什么
  6. CAN总线控制器配置说明
  7. 前端开发公众号的调试
  8. log4j不打日志问题之实战解决方案(二)
  9. #304 – 为没有文本标题的控件定义Access 键(Defining an Access Key That Gives Focus to a Different Control)
  10. 英语语法回顾3——名词和名词性从句