Python爬虫初识
本文章是对网易云课堂中的Python网络爬虫实战课程进行总结。感兴趣的朋友可以观看视频课程。课程地址
爬虫简介
一段自动抓取互联网信息的程序
非结构化数据
没有固定的数据格式,如网页资料。
必须通过ETL(Extract,Transformation,Loading)工具将数据转化为结构化数据才能使用。
工具安装
Anaconda
pip install requests
pip install BeautifulSoup4
pip install jupyter
打开jupyter
jupyter notebook
requests 网络资源截取插件
取得页面
import requests
url = ''
res = requests.get(url)
res.encoding = 'utf-8'
print (res.text)
将网页读进BeautifulSoup中
from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text, 'html.parser')
print (soup.text)
使用select方法找找出特定标签的HTML元素,可取标签名或id,class返回的值是一个list
select('h1') select('a')
id = 'thehead' select('#thehead')
alink = soup.select('a')
for link in alink:
print (link['href'])
例子
1、取得新浪陕西的新闻时间标题和连接
import requests
from bs4 import BeautifulSoup
res = requests.get('http://sx.sina.com.cn/')
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, 'html.parser') for newslist in soup.select('.news-list.cur'):
for news in newslist:
for li in news.select('li'):
title = li.select('h2')[0].text
href = li.select('a')[0]['href']
time = li.select('.fl')[0].text
print (time, title, href)
2、获取文章的标题,来源,时间和正文
import requests
from bs4 import BeautifulSoup
from datetime import datetime
res = requests.get('http://sx.sina.com.cn/news/b/2018-06-02/detail-ihcikcew5095240.shtml')
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, 'html.parser') h1 = soup.select('h1')[0].text
source = soup.select('.source-time span span')[0].text
timesource = soup.select('.source-time')[0].contents[0].text
date = datetime.strptime(timesource, '%Y-%m-%d %H:%M') article = []
for p in soup.select('.article-body p')[:-1]:
article.append(p.text.strip()) ' '.join(article)
简写为:
' '.join([p.text.strip() for p in soup.select('.article-body p')[:-1]])
说明:
datatime 包用来格式化时间
[:-1]去除最后一个元素
strip() 移除字符串头尾指定的字符(默认为空格或换行符)
' '.join(article) 将列表以空格连接
3、获取文章的评论数,评论数是通过js写入,不能通过上面的方法获取到,在js下,找到文章评论的js
import requests
import json comments = requests.get('http://comment5.news.sina.com.cn/cmnt/count?format=js&newslist=sx:comos-hcikcew5095240:0')
jd = json.loads(comments.text.strip('var data =')) jd['result']['count']['sx:comos-hcikcew5095240:0']['total']
4、将获得评论的方法总结成一个函数
import re
import json commenturl = 'http://comment5.news.sina.com.cn/cmnt/count?format=js&newslist=sx:comos-{}:0' def getCommentCounts(url):
m = re.search('detail-i(.+).shtml' ,url)
newsid = m.group(1)
comments = requests.get(commenturl.format(newsid))
jd = json.loads(comments.text.strip('var data ='))
return jd['result']['count']['sx:comos-'+newsid+':0']['total'] news = 'http://sx.sina.com.cn/news/b/2018-06-01/detail-ihcikcev8756673.shtml'
getCommentCounts(news)
5、输入地址得到文章的所有信息(标题、时间、来源、正文等)的函数(完整版)
import requests
import json
import re
from bs4 import BeautifulSoup
from datetime import datetime commenturl = 'http://comment5.news.sina.com.cn/cmnt/count?format=js&newslist=sx:comos-{}:0' def getCommentCounts(url):
m = re.search('detail-i(.+).shtml' ,url)
newsid = m.group(1)
comments = requests.get(commenturl.format(newsid))
jd = json.loads(comments.text.strip('var data ='))
return jd['result']['count']['sx:comos-'+newsid+':0']['total'] def getNewsDetail(newsurl):
result = {}
res = requests.get(newsurl)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, 'html.parser')
result['title'] = soup.select('h1')[0].text
result['newssource'] = soup.select('.source-time span span')[0].text
timesource = soup.select('.source-time')[0].contents[0].text
result['date'] = datetime.strptime(timesource, '%Y-%m-%d %H:%M')
result['article'] = ' '.join([p.text.strip() for p in soup.select('.article-body p')[:-1]])
result['comments'] = getCommentCounts(newsurl)
return result news = 'http://sx.sina.com.cn/news/b/2018-06-02/detail-ihcikcew8995238.shtml'
getNewsDetail(news)
Python爬虫初识的更多相关文章
- 孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块
孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块 (完整学习过程屏幕记录视频地址在文末) 从今天起开始正式学习Python的爬虫. 今天已经初步了解了两个主要的模块: ...
- Python爬虫--初识爬虫
Python爬虫 一.爬虫的本质是什么? 模拟浏览器打开网页,获取网页中我们想要的那部分数据 浏览器打开网页的过程:当你在浏览器中输入地址后,经过DNS服务器找到服务器主机,向服务器发送一个请求,服务 ...
- @1-2初识Python爬虫
初识Python爬虫 Python爬虫(入门+进阶) DC学院 环境搭建: Python2与Python3的差异:python2与python3整体差异不大,大多是一些语法上的区别,考虑到py ...
- 初识python爬虫框架Scrapy
Scrapy,按照其官网(https://scrapy.org/)上的解释:一个开源和协作式的框架,用快速.简单.可扩展的方式从网站提取所需的数据. 我们一开始上手爬虫的时候,接触的是urllib.r ...
- 初识Python和使用Python爬虫
一.python基础知识了解: 1.特点: Python的语言特性: Python是一门具有强类型(即变量类型是强制要求的).动态性.隐式类型(不需要做变量声明).大小写敏感(var和VAR代表 ...
- 【Python爬虫】BeautifulSoup网页解析库
BeautifulSoup 网页解析库 阅读目录 初识Beautiful Soup Beautiful Soup库的4种解析器 Beautiful Soup类的基本元素 基本使用 标签选择器 节点操作 ...
- python爬虫系列序
关于爬虫的了解,始于看到这篇分析从数据角度解析福州美食,和上份工作中的短暂参与. 长长短短持续近一年的时间,对其态度越来越明晰,噢原来这就是我想从事的工作. 于是想要系统学习的心理便弥散开来…… 参考 ...
- python 爬虫简介
初识Python爬虫 互联网 简单来说互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML.JS.CSS代码返回给浏览器,这些代码经过浏览器解析.渲染,将丰富多彩的网页呈现 ...
- Python正则表达式初识(二)
前几天给大家分享了Python正则表达式初识(一),介绍了正则表达式中的三个特殊字符“^”.“.”和“*”,感兴趣的伙伴可以戳进去看看,今天小编继续给大家分享Python正则表达式相关特殊字符知识点. ...
随机推荐
- 字符串写入txt文件
将字符串写入C盘txt文件里 File.AppendAllText(@"C:\" + DateTime.Now.ToString("HHmmss") + &qu ...
- 面对对象编程(OOP, Object Oriented Programming)及其三个基本特性
一千个读者,一千个哈姆雷特.对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 . 面向对象编程(OOP, O ...
- 解决 ArchLinux 下中文 Chinese 不能输入 couldnt input 的问题
解决 ArchLinux 下中文 Chinese 不能输入 couldnt input 的问题 一.Question 一年多的 ArchLinux 用户再次回归.然鹅,见面礼就是终端不能输入中文. 在 ...
- MiniUi中ComboBox与Autocomplete的区别
ComboBox 下拉选择框与Autocomplete的区别: 1,ComboBox只在页面加载时加载一次,发送一次请求: 2,Autocomplete会根据用户输入的值动态的去发送请求加载数据:
- 【xsy1058】 单词 乱搞
题目大意:给你$n$个长度为$m$的字符串,字符集仅为{x,y,z}三个字符,定义两个字符串$(s_i,s_j)$的相似度为$\sum_{k=1}^{m} [s_i[k]==s_j[k]]$. 从$0 ...
- bzoj 3027: [Ceoi2004]Sweet (生成函数)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3027. 题目大意:有$n$种数,每种有$C_i$个,问你在这些数中取出$[l,r]$个 ...
- MySQL权限管理(五)
一.什么是MySQL权限 各大帖子及文章都会讲到数据库的权限按最小权限为原则,这句话本身没有错,但是却是一句空话.因为最小权限,这个东西太抽象,很多时候你并弄不清楚具体他需要哪些权限. 现在很多mys ...
- Window History对象
History 对象属性 length 返回浏览器历史列表中的 URL 数量. History 对象方法 back() 加载 history 列表中的前一个 URL. window.history.b ...
- Java之IO(四)DataInputStream和DataOutputStream
转载请注明源出处:http://www.cnblogs.com/lighten/p/6986155.html 1.前言 DataInputStream和DataOutputStream分别继承了Fil ...
- 手淘适配-flexible
目标 拿一个双11的Mobile页面来做案例,比如你实现一个类似下图的一个H5页面: 目标很清晰,就是做一个这样的H5页面. 痛点 虽然H5的页面与PC的Web页面相比简单了不少,但让我们头痛的事情是 ...