Python爬虫基础细节(urllib+cookielib+BeautifulSoup)

原创 2017年01月03日 22:25:42

内容大概:

  • 简单介绍python如何下载网页
  • 发送post请求
  • urllib/2模块的方法应用
  • 分析网页的post请求
  • cookie处理
  • 利用BS分析网页

(由于并没有系统的学过http之类的,可能会有错误,希望大家可以指出)


urllib&cookielib:

urllib模块只用到了urlencode方法,目的是将原来的字典post数据转化成特定的字符串格式,只用到了下面的一行代码。

post_data = urllib.urlencode(post_data)

urllib2用到的就多了,首先模拟登陆的话需要用到cookie处理。
主要用到以下代码,固定格式,拿来用就好了。

        #安装cookie处理
        cj = cookielib.CookieJar()
        cookie_support = urllib2.HTTPCookieProcessor(cj)
        opener = urllib2.build_opener(cookie_support)
        urllib2.install_opener(opener)

然后设置一下自己的hears,目的是把自己伪装成一个浏览器。
导入这里的各种参数可以设置成别的,这里只是例子,具体改成什么可以打开浏览器的开发者模式看一下。

self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
            'Referer': 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Login/login',
            'Host': 'acm.sdut.edu.cn'}

这里写图片描述

然后设置打开网页时需要的request,需要用到url,post请求的数据,headers,当然这一步也可以跳过,单纯下载网页的话只用url就可以了。

request = urllib2.Request(url, post_data, headers)

接下来就是重要的打开网页,用到了urllib2的urlopen方法,参数可以是只是网页,也可以是一个之前说到的request。

#以下两种都可以
response = urllib2.urlopen(request)
response = urllib2.urlopen(url)

最后一点是response对象使用read方法就可以得到下载的html文本了。

response.read()

post请求的分析:

这里拿登陆OJ来做下示范。
首先打开登陆页面自己打开F12登陆一次。
然后注意箭头上指的两处,点下login后,右边的Request URL就是接下来将要用python访问的页面。
这里写图片描述

然后继续往下滑,下面箭头的部分就是自己提交的数据,也是接下来post_data里要放的内容。
这里写图片描述

于是登陆的过程我就可以这样写了(假设安装了cookie处理,定义了headers)

url = 'http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Login/login'
post_data = {'user_name': user, 'password':password }
request = urllib2.Request(url, post_data, headers)
response = urllib2.urlopen(request)

BeautifulSoup:

强烈推荐官方文档,有中文!有中文!!有中文!!!
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

首先明确一点,BS就是分析html的文本,按照一种树形的结构,每一个节点都可以拿来当一个bs对象使用。
首先创建一个bs对象先。
(这里用了html5lib解析器,具体可以百度去下载安装,另外python装好pip的话安装第三方库很方便的。当然这里也可以不要第二个参数,这样的话就会默认使用python自带的)

soup = BeautifulSoup(html, "html5lib")

然后是bs对象的find_all和find方法,find方法返回的是第一个匹配到的节点(bs对象),find_all则是返回一个列表(包含bs对象的列表),里面包含所有匹配的节点,如果没用匹配的节点的话,分别是None和[](空列表)。
他们都有name, class_, text参数(其实还有很多,这里我只用了这些基本的)
分别代表是节点名字,节点的class内容,和节点的文本。
下面只是一个示例,当然可以多个参数放在一起。

soup.find(class_ = 'next')
soup.find_all('tr')
soup.find(text = "Fish")

bs对象还可以直接访问他的节点的属性,父节点和子节点,当前这个节点的文本。
(假设a是他的子节点的话)

soup['href']
soup.parent
soup.a
soup.text

介绍了这些,然后以下就是一些综合应用的示例了,总之BS是非常好用,刚开始我以为得用到正则表达式…

#从ranklist找到自己的status
url = 'http://acm.sdut.edu.cn' + soup.find(text = "Fish").parent.parent.find_all('td')[2].a['href']
#找到页面的下一页的超链接
url = 'http://acm.sdut.edu.cn/' + soup.find(class_ = 'next')['href']
#找到每一个AC记录的代码链接
tr = tr.find_all('td')
                if tr[3].text == "Accepted" and (tr[6].text == "g++" or tr[6].text == "gcc"):
                    temp =  'http://acm.sdut.edu.cn/' + tr[6].a['href'], tr[2].a['href'][-9:-5]
版权声明:本文为博主乱写的,请任意转载。

相关文章推荐

Python爬虫urllib笔记(四)之使用BeautifulSoup爬取百度贴吧

BeautifulSoup-第三方分析网页内容库--替换正则表达式(有官方中文文档可查看) 提取百度贴吧网页中的楼主发的图片 # -*- coding:utf-8 - # # # Beau...

Python3.7 爬虫(三)使用 Urllib2 与 BeautifulSoup4 爬取网易云音乐歌单

版权声明:本文为 wintersmilesb101 -(个人独立博客– http://wintersmilesb101.online 欢迎访问)博主原创文章,未经博主允许不得转载。 废话在前面的的博客...

利用Python网络爬虫抓取韩寒博客推荐第一篇(urllib的简单使用与Beautifulsoup实战,i/o编程)

十艺半懂,不如一艺精通。实践才是真理 博主用的实例为韩寒博客的一片博文 (此方法只为实例演示请勿用于任何商业,否则后果自负) "http://blog.sina.com.cn/s/blog_4701...

Python使用urllib库和BeautifulSoup库爬虫总结

最近简单学习了一点爬虫,为此做一个小的总结,还望批评指正Python爬虫总结检查是否安装成功 python python urllib from urllib.request import url...

python的【爬虫】:使用urllib爬取wiki文章,使用beautifulSoup解析html

之所以写这个,是因为搜不到关于wiki爬取方面的教程。 先学习: 正则表达式,http://python.jobbole.com/81346/ BeautifulSoup(htm...

python 爬虫(4)urllib2的使用细节与抓站技巧

1.Proxy的设置urllib2默认会使用环境变量http_proxy来设置HTTP Proxy。 如果想在程序中明确控制Proxy而不受环境变量的影响,可以使用代理。# -*-coding:ut...

[Python]网络爬虫(五):urllib2的使用细节与抓站技巧

前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节。 1.Proxy 的设置 urllib2 默认会使用环境变量 http_proxy 来设置 HTT...

[Python]网络爬虫(五):urllib2的使用细节与抓站技巧

转载自http://blog.csdn.net/wxg694175346/article/list/1   [Python]网络爬虫(五):urllib2的使用细节与抓站技巧 ...

python urllib2 cookielib处理验证码模拟人人登陆

又重新学了下python的urllib2,参考http://www.cnpythoner.com/post/30.html和http://www.pythoner.com/65.html,写了个登陆人...

用BeautifulSoup,urllib,requests写twitter爬虫(1)

在github上找到了一个twitter的爬虫,试了下,修改了其中一个有关编码的问题,可以抓取一定数量的twitter https://gist.github.com/TVFlash/cccc280...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)