学习python前纠结了下,到底是应该一个个知识点吃透,然后写些小程序。还是应该快速掌握基础语法,快速实践。思考后认为前者这么学习速度真心不高,于是花2天时间看了下python3的语法,虽然很多都不明白,但是带着小项目来学习直接解决问题。在项目中遇到问题,查阅一点点解决,这样很靠谱。

  在实现一个最简单的爬虫前,应该知道需要用到哪些东西?

  1.如果发送一个http请求,来抓取网页内容。

  2.如何方便的解析html的dom节点,如果有像phpquery这样的工具包就太简单了。

  百度了下发现 urlib模块能解决第一个问题,BeautifulSoup模块能解决第二个问题

  urlib3模块简单使用  

 import urllib3

 #请求的地址
url = 'https://www.baidu.com/' http = urllib3.PoolManager()
r = http.request('GET',url) print(r.status) #请求状态码
print(r.data) #获取内容

  需要注意的是打印出内容(r.data)发现尼玛, 总是有个 b' 这样的东西在字符串最前面。google下发先大致是说,python默认字符是ascii,但是请求的网页编码是utf8字符的,获取的内容需要转成

utf8字符集然后在输出,可以这么干。

print(r.data.decode('utf-8'))

  然后重新运行发现大功告成。

  再来看下BeautifulSoup模块,其实挺简单的就和jquery操作dom类似,具体看文档即可.

  

 from bs4 import BeautifulSoup
import re #正则 str = '''
<div class="menu">
<ul class="main-menu">
<li class="first-menu"><a href="/index.php?m=Admin&c=Goods&a=index&typelist=1">品牌商管理</a></li>
<li class="first-menu"><a href="javascript:;">商品管理</a></li>
<li class="first-menu"><a href="/index.php?m=Admin&c=MyDistribution&a=index">分销平台</a></li>
<li class="first-menu">
<a href="javascript:;">消息中心</a>
<ul class="sub-menu clearfix">
<li><a href="/index.php?m=Admin&c=News&a=businessNewsList">商家公告</a></li>
<li><a href="/index.php?m=Admin&c=Distribution&a=distributionList">申请分销</a></li>
<li><a href="/index.php?m=Admin&c=Message&a=chatMessageList">聊天消息</a></li>
<li><a href="/index.php?m=Admin&c=System&a=systemNewsList">系统公告</a></li>
</ul>
</li>
<li class="first-menu"><a href="javascript:;">嗨库社区</a></li>
<li class="first-menu"><a href="javascript:;">我的设置</a></li>
</ul>
</div>
''' soup = BeautifulSoup(str,'html.parser',from_encoding='utf-8') print('获取所有的链接')
links= soup.find_all('a'); #list
for a in links:
print(a),print(a['href']) #获取a标签,和属性href print('获取href为 /index.php?m=Admin&c=Goods&a=index&typelist=1的url')
links = soup.find('a',href="/index.php?m=Admin&c=Goods&a=index&typelist=1")
print(links.name,links['href'],links.get_text()) print('通过class属性')
links = soup.find('ul',class_='main-menu')
print(links) print('正则匹配')
links = soup.find_all('a',href=re.compile(r"List")) # 加r -> 要转义\只需要写成 \\即可 , 不然要写成\\\
print(links)

  最后结合2个模块来实现,获取抓取页面的 a标签的href

 from bs4 import BeautifulSoup
import re #正则
import urllib.parse
import urllib3 r_url = 'http://baike.baidu.com/link?url=41wW1kkRvhT23i_c6258EtBeBv6Xwtz7gwd3t0q5k-xCs_ipCGRc_ixcCLMail3QtQe4ZRgOK83ek9aHm44QPa' #发送请求获取内容
http = urllib3.PoolManager()
r = http.request('GET',r_url) str = data = r.data.decode('utf-8') '''
#挽尊学习法,先发获取的内容生成文件,看下到底是什么
f = open('2.html','w')
f.write(data.decode('utf-8'))
f.close()
''' soup = BeautifulSoup(str,'html.parser',from_encoding='utf-8')
#通过正则获取所有href 为  /view/123/456.htm 这样的链接
links = soup.find_all('a',href=re.compile(r'/view/[\d/]+\.htm')) # 加r -> \只需要一个 \转义 , 不然要写成\\\ for url in links:
new_url = url['href']
'''
将 r_url的域名-> http://baike.baidu.com
和 新的url -> /view/123/456.htm 组装起来
'''
new_full_url = urllib.parse.urljoin(r_url,new_url) #http://baike.baidu.com/view/123/456.htm
print(new_full_url)

  参考:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

     http://urllib3.readthedocs.io/en/latest/ 

      

python简单爬虫(一)的更多相关文章

  1. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

  2. Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...

  3. GJM : Python简单爬虫入门(二) [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  4. Python 简单爬虫案例

    Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a ...

  5. Python简单爬虫记录

    为了避免自己忘了Python的爬虫相关知识和流程,下面简单的记录一下爬虫的基本要求和编程问题!! 简单了解了一下,爬虫的方法很多,我简单的使用了已经做好的库requests来获取网页信息和Beauti ...

  6. Python简单爬虫

    爬虫简介 自动抓取互联网信息的程序 从一个词条的URL访问到所有相关词条的URL,并提取出有价值的数据 价值:互联网的数据为我所用 简单爬虫架构 实现爬虫,需要从以下几个方面考虑 爬虫调度端:启动爬虫 ...

  7. python简单爬虫一

    简单的说,爬虫的意思就是根据url访问请求,然后对返回的数据进行提取,获取对自己有用的信息.然后我们可以将这些有用的信息保存到数据库或者保存到文件中.如果我们手工一个一个访问提取非常慢,所以我们需要编 ...

  8. python 简单爬虫(beatifulsoup)

    ---恢复内容开始--- python爬虫学习从0开始 第一次学习了python语法,迫不及待的来开始python的项目.首先接触了爬虫,是一个简单爬虫.个人感觉python非常简洁,相比起java或 ...

  9. python 简单爬虫diy

    简单爬虫直接diy, 复杂的用scrapy import urllib2 import re from bs4 import BeautifulSoap req = urllib2.Request(u ...

  10. Python简单爬虫入门一

    为大家介绍一个简单的爬虫工具BeautifulSoup BeautifulSoup拥有强大的解析网页及查找元素的功能本次测试环境为python3.4(由于python2.7编码格式问题) 此工具在搜索 ...

随机推荐

  1. BZOJ4644: 经典傻逼题【线段树分治】【线性基】

    Description 这是一道经典傻逼题,对经典题很熟悉的人也不要激动,希望大家不要傻逼. 考虑一张N个点的带权无向图,点的编号为1到N. 对于图中的任意一个点集 (可以为空或者全集),所有恰好有一 ...

  2. linux下不同tomcat使用不同的jdk版本

    环境:Linux tomcat7 使用jdk7 tomcat 8使用jdk8 最近写好了一个程序,需要部署在测试机器上,这个测试机器上已经有了在运行的tomcat7, 我这个程序要求使用tomcat8 ...

  3. .NET4.0中使用4.5中的 async/await 功能实现异步

    在.NET Framework 4.5中添加了新的异步操作库,但是在.NET Framework 4.0中却无法使用.这时不免面临着抉择,到底是升级整个解决方案还是不使用呢? 如果你的软件还没发布出去 ...

  4. 微信跳一跳,Python辅助自动跳程序

    一.说明 此代码借鉴一位大神提供在gitHub上的源码,已经做了简化合并处理,成功连上手机并运行后,可实现自动玩微信跳一跳游戏,刷个1000+的分数轻轻松松 github源码地址 https://gi ...

  5. FastAdmin 的前端环境怎么安装?

    FastAdmin 的前端环境怎么安装? 安装 Git 安装 Node.js 安装 cnpm 安装 bower 开始安装 FastAdmin 的前端组件 bower install bower upd ...

  6. FastAdmin 开发第四天:初试命令行

    FastAdmin 最强大的是命令行 先从 test 表开始. 在 FastAdmin 默认有一个 test 表格,用于命令行 crud 测试. 如何开始? 只需要在项目命令行中输入以下命令就会自动生 ...

  7. 移植SDL2.2问题及解决方法

    项目需要ffmpeg+SDL播放视频,所以不得不移植SDL 根据 <移植SDL最新版本>http://blog.csdn.net/flyyang123456789/article/deta ...

  8. Java-Runoob-高级教程-实例-环境设置实例:3.Java 实例 - 如何执行指定class文件目录(classpath)?

    ylbtech-Java-Runoob-高级教程-实例-环境设置实例:3.Java 实例 - 如何执行指定class文件目录(classpath)? 1.返回顶部 1. Java 实例 - 如何执行指 ...

  9. Hive 的查询结果直接导入到 MySQL 中的方法

    步骤一: hive> add jar /setup/hive/lib/mysql-connector-java-5.1.25-bin.jar; hive> add jar /usr/lib ...

  10. SQL Server修改表结构后批量更新所有视图

    最近修改了数据库表结构,数据同步的时候出了问题,发现很多数据明明已经修改,但是通过视图筛选出来的还是原来的数据,所以怀疑应该是视图缓存了数据,在园子里找到下面的博文,在这里做个记录备忘. 原文链接:h ...