python3: 爬虫---- urllib, beautifulsoup
最近晚上学习爬虫,首先从基本的开始;
python3 将urllib,urllib2集成到urllib中了, urllib可以对指定的网页进行请求下载, beautifulsoup 可以从杂乱的html代码中
分离出我们需要的部分;
注: beautifulsoup 是一种可以从html 或XML文件中提取数据的python库;
实例1:
from urllib import request
from bs4 import BeautifulSoup as bs
import re header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'
} def download():
"""
模拟浏览器进行访问;
:param url:
:return:
"""
for pageIdx in range(1, 3, 1):
#print(pageIdx)
url = "https://www.cnblogs.com/#p%s" % str(pageIdx)
print(url)
req = request.Request(url, headers=header)
rep = request.urlopen(req).read()
data = rep.decode('utf-8')
print(data)
content = bs(data)
for link in content.find_all('h3'):
content1 = bs(str(link), 'html.parser')
print(content1.a['href'],content1.a.string)
curhtmlcontent = request.urlopen(request.Request(content1.a['href'], headers=header)).read()
#print(curhtmlcontent.decode('utf-8'))
open('%s.html' % content1.a.string, 'w',encoding='utf-8').write(curhtmlcontent.decode('utf-8')) if __name__ == "__main__":
download()
实例2:
# -- coding: utf-8 --
import unittest
import lxml
import requests
from bs4 import BeautifulSoup as bs def school():
for index in range(2, 34, 1):
try:
url="http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-%s.html" % str(index)
r = requests.get(url=url)
soup = bs(r.content, 'lxml')
city = soup.find_all(name="td",attrs={"colspan":"7"})[0].string
fp = open("%s.txt" %(city), "w", encoding="utf-8")
content1 = soup.find_all(name="tr", attrs={"height": "29"})
for content2 in content1:
try:
contentTemp = bs(str(content2), "lxml")
soup_content = contentTemp.find_all(name="td")[1].string
fp.write(soup_content + "\n")
print(soup_content)
except IndexError:
pass
fp.close()
except IndexError:
pass class MyTestCase(unittest.TestCase):
def test_something(self):
school() if __name__ == '__main__':
unittest.main()
BeatifulSoup支持很多HTML解析器(下面是一些主要的):
| 解析器 | 使用方法 | 优势 | 劣势 |
| Python标准库 | BeautifulSoup(markup, “html.parser”) | (1)Python的内置标准库(2)执行速度适中(3)文档容错能力强 | Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差 |
| lxml HTML解析器 | BeautifulSoup(markup, “lxml”) | (1)速度快(2)文档容错能力强 | 需要安装C语言库 |
| lxml XML解析器 | BeautifulSoup(markup, [“lxml”, “xml”]) OR BeautifulSoup(markup, “xml”) | (1)速度快(2)唯一支持XML的解析器 | 需要安装C语言库 |
| html5lib | BeautifulSoup(markup, “html5lib”) | (1)最好的容错性(2)以浏览器的方式解析文档(3)生成HTML5格式的文档 | (1)速度慢(2)不依赖外部扩展 |
python3: 爬虫---- urllib, beautifulsoup的更多相关文章
- Python3 使用 urllib 编写爬虫
什么是爬虫 爬虫,也叫蜘蛛(Spider),如果把互联网比喻成一个蜘蛛网,Spider就是一只在网上爬来爬去的蜘蛛.网络爬虫就是根据网页的地址来寻找网页的,也就是URL.举一个简单的例子,我们在浏览器 ...
- 常见的爬虫分析库(1)-Python3中Urllib库基本使用
原文来自:https://www.cnblogs.com/0bug/p/8893677.html 什么是Urllib? Python内置的HTTP请求库 urllib.request ...
- urllib+BeautifulSoup无登录模式爬取豆瓣电影Top250
对于简单的爬虫任务,尤其对于初学者,urllib+BeautifulSoup足以满足大部分的任务. 1.urllib是Python3自带的库,不需要安装,但是BeautifulSoup却是需要安装的. ...
- python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用
站长资讯平台:python3爬虫系列19之随机User-Agent 和ip代理池的使用我们前面几篇讲了爬虫增速多进程,进程池的用法之类的,爬虫速度加快呢,也会带来一些坏事. 1. 前言比如随着我们爬虫 ...
- python爬虫 - Urllib库及cookie的使用
http://blog.csdn.net/pipisorry/article/details/47905781 lz提示一点,python3中urllib包括了py2中的urllib+urllib2. ...
- 对于python爬虫urllib库的一些理解(抽空更新)
urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数: 在Python3的urllib库中,所有和网 ...
- python3爬虫中文乱码之请求头‘Accept-Encoding’:br 的问题
当用python3做爬虫的时候,一些网站为了防爬虫会设置一些检查机制,这时我们就需要添加请求头,伪装成浏览器正常访问. header的内容在浏览器的开发者工具中便可看到,将这些信息添加到我们的爬虫代码 ...
- Python3中Urllib库基本使用
什么是Urllib? Python内置的HTTP请求库 urllib.request 请求模块 urllib.error 异常处理模块 urllib.par ...
- Python3.x:BeautifulSoup()解决中文乱码问题
Python3.x:BeautifulSoup()解决中文乱码问题 问题: BeautifulSoup获取网页内容,中文显示乱码: 解决方案: 遇到情况也是比较奇葩,利用chardet获取网页编码,然 ...
随机推荐
- 【数学建模】day05-微分方程建模
很多问题,归结起来是微分方程(组)求解的问题.比如:为什么使用三级火箭发射卫星.阻滞增长人口模型的建立…… MATLAB提供了良好的微分方程求解方案. 一.MATLAB求微分方程的符号解 matlab ...
- 源码分析: 图片加载框架Picasso源码分析
使用: Picasso.with(this) .load("http://imgstore.cdn.sogou.com/app/a/100540002/467502.jpg") . ...
- BZOJ1823[JSOI2010]满汉全席——2-SAT+tarjan缩点
题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而能够烹饪出经过 ...
- Codeforces Round #530 (Div. 2) F (树形dp+线段树)
F. Cookies 链接:http://codeforces.com/contest/1099/problem/F 题意: 给你一棵树,树上有n个节点,每个节点上有ai块饼干,在这个节点上的每块饼干 ...
- 微信小程序原生开发简介
简介: 总结: 1. 逻辑层使用js引擎,视图层使用webview渲染 2. 微信小程序已经支持了绝大部分的 ES6 API 3. 可以自动补全css的兼容语法 文档:https://develope ...
- 洛谷P3953 逛公园(NOIP2017)(最短/长路,拓扑排序,动态规划)
洛谷题目传送门 又是一年联赛季.NOIP2017至此收官了. 这个其实是比较套路的图论DP了,但是细节有点恶心. 先求出\(1\)到所有点的最短路\(d1\),和所有点到\(n\)的最短路\(dn\) ...
- 【CF526G】Spiders Evil Plan(贪心)
[CF526G]Spiders Evil Plan(贪心) 题面 洛谷 CodeForces 给定一棵树,要求选择\(y\)条链,满足被链覆盖的所有点在树上联通,且\(x\)必定在联通块中. 对于每次 ...
- luogu3621 城池攻占 (倍增)
好像所有人都写的左偏树 但我不会啊233 首先发现乘的时候 系数不会为负,所以能得到一个关键条件:变化后的战斗力随变化前的战斗力大小单调 所以我们考虑倍增 设hp[x][i]是从x开始一路攻克$2^i ...
- Diagnostic Trouble Code诊断故障码
所有电子控制单元(ECU)都会根据整车厂规范要求对相关故障进行记录,并储存在NVM(也称作EEPROM)相当于平常电脑上硬盘里.除故障代码外,还会记录故障发生时相关整车情况(如供电电压,环境温度 ...
- Vagrant将下载好的镜像装载到本地中
Vagrant box add centos7 ${path}CentOS-7-x86_64-Vagrant-1803_01.VirtualBox Vagrant init ${名字} Vagrant ...