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爬虫零基础入门

思路讲解+代码解释注释以后的代码。代码不足之处相关链接 关于爬虫相关理论认识下载安装BeautifulSoup,请移步 思路讲解+代码解释 尽管现在是2014年了,但...
  • ctt594088
  • ctt594088
  • 2014年06月03日 18:44
  • 830

零基础的我是这样开始写Python爬虫的(附代码)

来源:程序猿 本文长度为2863字,建议阅读5分钟 本文为你分享零基础开始写爬虫的经验。 刚开始接触爬虫的时候,简直惊为天人,十几行代码,就可以将无数网页的信息全部获取下来,自动...
  • eNohtZvQiJxo00aTz3y8
  • eNohtZvQiJxo00aTz3y8
  • 2017年12月08日 00:00
  • 559

零基础写python爬虫之爬虫编写全记录

先来说一下我们学校的网站: http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html 查询成绩需要登录,然后显示各学科成绩,但是只显示成绩而没有绩点,也...
  • hmy1106
  • hmy1106
  • 2015年04月18日 14:37
  • 9130

python简单爬虫代码,python入门

python简单爬虫代码 python入门
  • tangdou5682
  • tangdou5682
  • 2016年09月20日 15:55
  • 4856

Python面试题 基础篇

最近,整理了一些python常见的面试题目,语言shizhong
  • database_zbye
  • database_zbye
  • 2014年08月08日 13:15
  • 13157

Python爬虫开发(一):零基础入门

0×00 介绍 0×01 要求 0×02 你能学到什么? 0×03 知识补充 0×04 最简单的开始 0×05 更优雅的解决方案 0×06 url合法性判断 0×07 总结与预告...
  • in_aday
  • in_aday
  • 2016年02月29日 14:43
  • 1116

零基础自学用Python 3开发网络爬虫(五): 使用第三方模块快速抓取与解析

点击进入本系列目录 在前面的四篇文章中, 我们一直采用 python 3 自带的 urllib  模块来抓取网页, 然后用 re 模块来处理抓取到的数据. 这次我们使用 Requests 库来代替 ...
  • IAlexanderI
  • IAlexanderI
  • 2017年03月28日 15:27
  • 987

Python爬虫入门笔记:爬虫简介

爬虫技术是用来从互联网上自动获取需要的数据。今天我们对爬虫进行简单的介绍: ​        1、什么是爬虫?         爬虫是一段自动抓取互联网信息的程序,大家可以理解为在互联网这张网上爬来爬...
  • flyingfishmark
  • flyingfishmark
  • 2016年04月22日 10:09
  • 1281

零基础写python爬虫之爬虫编写全记录

先来说一下我们学校的网站: http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html 查询成绩需要登录,然后显示各学科成绩,但是只显示成绩而没有绩点,也就是...
  • qq_37267015
  • qq_37267015
  • 2017年03月22日 23:01
  • 936

高级Python网络爬虫使用技术选择指南

一 相关背景 网络爬虫(Web Spider)又称网络蜘蛛、网络机器人,是一段用来自动化采集网站数据的程序。如果把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络爬虫不仅能...
  • hudan2714
  • hudan2714
  • 2017年05月03日 09:03
  • 554
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python爬虫基础细节(urllib+cookielib+BeautifulSoup)
举报原因:
原因补充:

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