1.背景介绍

(1)在注册了某网站之后,发现站内个人页面有个关于京杭大运河的征文。再加上之前,九寨沟地震第一时间机器人写了一篇通讯稿。于是我就在想,既然机器可以写通讯稿,那么是不是也可以用来写篇关于京杭大运河的征文?有个大概思路,那么就开撸吧。

(2)打开度娘,搜索:北京 运河 京杭,初步看看源代码结构。

用Requests和Re(百度的搜索链接用正则要比BeautifulSoup方便一些),提取链接地址。

问题来了,提取出来的链接如下:

http://www.baidu.com/link?url=xrStztha3DcV7ycuutlYKna-IOpP4qUJ7x0F48oUfxvb9moDNuanGFVpA_r9q8y4k6bm6HxotwnLM6oRoVabtgMrKnk3b6ZH2VJNixURhLW

用Requests进行get请求并不能获取目标页面响应,为毛?

因为link?url=?后面的密文需要用JS进行解密,而这个JS,Requests束手无策。是的,必须上PhantomJS进行JS渲染。

(2)用PhantomJS+Selinium对上免得加密链接进行访问(对前端JS非常熟悉的筒子,也可以逆向分析JS函数,在通过传参获取真实的URL,这招是传统的手工作坊)。用driver.page_source()获取真实地址对应的网页源码

(3)这一次我并不是要对真实网页的某一网页标签进行提取,再者百度搜索结果的不同网站关于京杭大运河的文章格式都是不同的,没有办法提取。呵呵,此行目的是为了获取不同网站关于大运河新闻的文本或图片。
(4)对文本数据进行词频分析。预留作业:对采集到的图片用前面一节讲的生成照片墙。

2.分析结果(事先不知道京杭大运河是什么鬼)

  • 始于1018年, 1026年, 1079年(1000年为错误匹配),经查证1018年就开挖了。
  • 1293年、1779年、1958年、1968年京杭大运河发生了什么?
  • 京杭大运河的报道主要来源:百科,腾讯,新浪。
  • 大运河是中华民族的伟大工程,是南水北调伟大项目的组成部分。
  • 大运河是民族的遗产,建成后将免费使用,不收过路费(瞎掰的)。
  • 大运河建设关系到运输、旅游和农业灌溉。
  • 大运河建设将拉动投资,有助于促进区域经济发展。
  • 运河建设是世界性工程。
  • 专家指出不管从历史、社会、人文、交通、地方、博物馆、商业等角度都是迫切的(瞎掰的)。
  • 大运河要开凿,要以全新面貌重现辉煌。
  • 大运河建成后将会加大保护力度,发展漕运,还得申遗。
  • 招聘若干名漕运管理人员(瞎掰的,不招盐运)。

PS:如果你学会这招,补充一点历史知识,加上一张沿线美食、美景的照片墙,一篇高逼格的人机交互稿件就出来了。哪里需要征文都可以这样玩,自媒体也可以这样玩。

3.源码

(1)抓取百度初始化搜索页面源文件

# coding = utf-8
import requests
import re
headers = {'Host': 'ss1.bdstatic.com','content-type': 'application/json','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36','Referer': 'https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%20%E8%BF%90%E6%B2%B3%20%E4%BA%AC%E6%9D%AD&pn=0&oq=%E5%8C%97%E4%BA%AC%20%E8%BF%90%E6%B2%B3%20%E4%BA%AC%E6%9D%AD','Connection': 'keep-alive'
}
base_url = 'https://www.baidu.com/'
s = requests.session()
s.get(base_url)
find_urls = []
for i in range(20):print(i)url = 'https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%20%E8%BF%90%E6%B2%B3%20%E4%BA%AC%E6%9D%AD&pn=' + str(i * 10)  # 关键词(北京 运河 京杭)print(url)content = s.get(url, headers=headers).textfind_urls.append(content)
find_urls = list(set(find_urls))
f = open('url.txt', 'a+',encoding='utf-8')
f.writelines(find_urls)
f.close()

(2)用正则提取搜索页面的初始URL(也可以用BS4)

# coding = utf-8
import re
f = open('url.txt',encoding='utf-8').read()
f2 = open('urlin.txt', 'a+',encoding='utf-8')
find_urls = re.findall('href="http://www.baidu.com/link(.+?)"', f )
find_urls = list(set(find_urls))
find_u = []
for url_i in find_urls:in_url = 'http://www.baidu.com/link' + url_i + 'n'f2.write(in_url)
f2.close()

(3)用重器PhantomJS获取网页文本

# encoding: utf-8# 导入可能用到的库
import requests, json, re, random, csv, time, os, sys, datetime
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesdcap = DesiredCapabilities.PHANTOMJS
dcap[ "phantomjs.page.settings.userAgent"] = "Mozilla / 4.0(Windows NT 10.0; Win64;x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome/51.0.2704.79 Safari/ 537.36Edge/14.14393"
# 请求头不一样,适应的窗口不一样!driver = webdriver.PhantomJS(desired_capabilities=dcap)
driver.set_page_load_timeout(10)
driver.set_script_timeout(10)#这两种设置都进行才有效find_urls = open('urlin.txt',encoding='utf-8').readlines()
# print(len(find_urls))  # 634个URL # 关键词(北京 运河 京杭)
i = 0
f = open('jh_text.txt', 'a+',encoding='utf-8')
for inurl in find_urls:print(i,inurl)i+=1try:driver.get(inurl)content = driver.page_source# print(content)soup = BeautifulSoup(content, "lxml")f.write(soup.get_text())time.sleep(1)except:driver.execute_script('爬虫跳坑里,等会继续')

(4)对50页百度搜索结果的文本(13.7M)剔除停用词,然后进行词频分析(pandas够了)。

老鸟可去另一专栏:Python中文社区

新手可查阅历史目录:

yeayee:Python数据分析及可视化实例目录​zhuanlan.zhihu.com


最后,别只收藏不关注哈

python数据分析实例_Python数据分析及可视化实例之爬虫源码(05)相关推荐

  1. python数据分析可视化实例_Python数据分析及可视化实例之基于Kmean分析RFM进行用户关怀...

    系列文章总目录:Python数据分析及可视化实例目录 数据集下载 Python数据分析及可视化实例之全国各城市房价分析(含数据采集) Python数据分析及可视化实例之帝都房价预测 Python数据分 ...

  2. python房价数据挖掘_Python数据分析及可视化实例之帝都房价预测

    数据集下载易一网络科技 - 付费文章​www.intumu.com 加载数据 import pandas as pd df=pd.read_csv("MYUNOI.csv") # ...

  3. python统计分析书籍_Python数据分析入门书籍推荐

    在当下这个数据驱动的时代,毫不夸张的说各行各业的商业决策和运营管理都离不开数据分析,因此数据分析已经成为当前每个人的必备技能和加分项.对于许多初学者来讲,想要入门Python数据分析常常不知道从何下手 ...

  4. python 多项式回归 假设检验_Python数据分析入门书籍推荐

    在当下这个数据驱动的时代,毫不夸张的说各行各业的商业决策和运营管理都离不开数据分析,因此数据分析已经成为当前每个人的必备技能和加分项.对于许多初学者来讲,想要入门Python数据分析常常不知道从何下手 ...

  5. python数据分析软件_Python数据分析工具

    Numpy Python没有提供数组功能,虽然列表可以完成基本的数组功能,但他不是真正的数组.Numpy内置函数处理速度是c语言级别,因此尽量使用内置函数,避免出现效率瓶颈的现象. Numpy的安装: ...

  6. python 数据分析 库_Python数据分析库

    python 数据分析 库 什么是数据分析? (What is Data Analytics?) Data is power. Insights acquired from data is the k ...

  7. python ppt 绘图_Python数据分析-Matplotlib绘图基础

    本文结构: 一.Matplotlib绘图基础及中文乱码解决 二.如何利用pandas绘图? 三.如何利用notebook制作分析报告? 图形在我们日常生活中无处不在.如果没有可视化,就是一些数字罗列, ...

  8. Python数据分析案例:对全国大学综合数据分析,本可视化展示(附加2021全国大学排名爬虫源码)

    前言 软科中国大学排名以专业.客观.透明的优势赢得了高等教育领域和社会的广泛关注和认可,本次将利用Python对我国大学排名和分布情况进行一番研究. 先展示下爬虫的源码 import requests ...

  9. python基础数据实例_Python基本数据类型及实例详解

    Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对 ...

最新文章

  1. vue 渲染函数处理slot_面试官:Vue 和 React 对于组件的更新粒度有什么区别?
  2. webspere php,Project Zero、WebSphere sMash、PHP和JAVA的整合
  3. php表单验证并使值变化,php – Zend_Form手动设置和验证字段值
  4. zzuoj 10409: D.引水工程
  5. 如何下载指定版本的elasticsearch和kibana
  6. 算法:Sliding Window Maximum(滑动窗口最大值)
  7. 基于php+Mysql新闻管理系统 开题报告
  8. 空间参考(一)---墨卡托投影、高斯-克吕格投影、UTM投影的异同
  9. 高校机房建设 云服务器 终端,学校云机房建设使用NComputing微型终端机解决方案...
  10. openlayers6 解决调用百度地图之瓦片偏移、坐标偏移、无限拖动裂缝偏移问题
  11. 动态菜单,根据登录用户权限返回不同菜单,登录完成跳转到不同的首页
  12. 导出为excel无法引用解决方法
  13. 一键生成惊雷等喊麦歌词
  14. 大数据三个特点的理解
  15. Git config --global user.email or user.name
  16. C语言学生信息管理系统(结构体数组,文件)
  17. 如何从 0 到 1 设计、构建移动分析架构
  18. 【转】Clique共识算法
  19. python一键抠图
  20. 调试九法 软硬件错误的排查之道

热门文章

  1. 解决VS中注释乱码的问题
  2. 华为机试HJ32:密码截取
  3. java通过证书获取CN_java – 从证书DN解析CN [重复]
  4. HTTP接口测试工具Postman
  5. 安装erlang没有bin文件夹_RabbitMQ安装教程
  6. c语言 recv_sin,C++_C语言中经socket接收数据的相关函数详解,recv()函数: 头文件:#incl - phpStudy...
  7. pylint警告: An attribute defined in json.encoder line 158 hides this methodpylint(method-hidden)
  8. HEVC---CompressCU 函数解析
  9. git21天打卡day11-删除分支
  10. 手动测试是进入测试自动化之前的重要阶段