python 爬虫 包_Python爬虫包BeautifulSoup实例(三)

一步一步构建一个爬虫实例,抓取糗事百科的段子

先不用beautifulsoup包来进行解析

第一步,访问网址并抓取源码

# -*- coding: utf-8 -*-

# @Author: HaonanWu

# @Date: 2016-12-22 16:16:08

# @Last Modified by: HaonanWu

# @Last Modified time: 2016-12-22 20:17:13

import urllib

import urllib2

import re

import os

if __name__ == '__main__':

# 访问网址并抓取源码

url = 'http://www.qiushibaike.com/textnew/page/1/?s=4941357'

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'

headers = {'User-Agent':user_agent}

try:

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

response = urllib2.urlopen(request)

content = response.read()

except urllib2.HTTPError as e:

print e

exit()

except urllib2.URLError as e:

print e

exit()

print content.decode('utf-8')

第二步,利用正则表达式提取信息

首先先观察源码中,你需要的内容的位置以及如何识别

然后用正则表达式去识别读取

注意正则表达式中的 . 是不能匹配\n的,所以需要设置一下匹配模式。

# -*- coding: utf-8 -*-

# @Author: HaonanWu

# @Date: 2016-12-22 16:16:08

# @Last Modified by: HaonanWu

# @Last Modified time: 2016-12-22 20:17:13

import urllib

import urllib2

import re

import os

if __name__ == '__main__':

# 访问网址并抓取源码

url = 'http://www.qiushibaike.com/textnew/page/1/?s=4941357'

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'

headers = {'User-Agent':user_agent}

try:

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

response = urllib2.urlopen(request)

content = response.read()

except urllib2.HTTPError as e:

print e

exit()

except urllib2.URLError as e:

print e

exit()

regex = re.compile('

.*?(.*?).*?
', re.S)

items = re.findall(regex, content)

# 提取数据

# 注意换行符,设置 . 能够匹配换行符

for item in items:

print item

第三步,修正数据并保存到文件中

# -*- coding: utf-8 -*-

# @Author: HaonanWu

# @Date: 2016-12-22 16:16:08

# @Last Modified by: HaonanWu

# @Last Modified time: 2016-12-22 21:41:32

import urllib

import urllib2

import re

import os

if __name__ == '__main__':

# 访问网址并抓取源码

url = 'http://www.qiushibaike.com/textnew/page/1/?s=4941357'

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'

headers = {'User-Agent':user_agent}

try:

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

response = urllib2.urlopen(request)

content = response.read()

except urllib2.HTTPError as e:

print e

exit()

except urllib2.URLError as e:

print e

exit()

regex = re.compile('

.*?(.*?).*?
', re.S)

items = re.findall(regex, content)

# 提取数据

# 注意换行符,设置 . 能够匹配换行符

path = './qiubai'

if not os.path.exists(path):

os.makedirs(path)

count = 1

for item in items:

#整理数据,去掉\n,将
换成\n

item = item.replace('\n', '').replace('
', '\n')

filepath = path + '/' + str(count) + '.txt'

f = open(filepath, 'w')

f.write(item)

f.close()

count += 1

第四步,将多个页面下的内容都抓取下来

# -*- coding: utf-8 -*-

# @Author: HaonanWu

# @Date: 2016-12-22 16:16:08

# @Last Modified by: HaonanWu

# @Last Modified time: 2016-12-22 20:17:13

import urllib

import urllib2

import re

import os

if __name__ == '__main__':

# 访问网址并抓取源码

path = './qiubai'

if not os.path.exists(path):

os.makedirs(path)

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'

headers = {'User-Agent':user_agent}

regex = re.compile('

.*?(.*?).*?
', re.S)

count = 1

for cnt in range(1, 35):

print '第' + str(cnt) + '轮'

url = 'http://www.qiushibaike.com/textnew/page/' + str(cnt) + '/?s=4941357'

try:

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

response = urllib2.urlopen(request)

content = response.read()

except urllib2.HTTPError as e:

print e

exit()

except urllib2.URLError as e:

print e

exit()

# print content

# 提取数据

# 注意换行符,设置 . 能够匹配换行符

items = re.findall(regex, content)

# 保存信息

for item in items:

# print item

#整理数据,去掉\n,将
换成\n

item = item.replace('\n', '').replace('
', '\n')

filepath = path + '/' + str(count) + '.txt'

f = open(filepath, 'w')

f.write(item)

f.close()

count += 1

print '完成'

使用BeautifulSoup对源码进行解析

# -*- coding: utf-8 -*-

# @Author: HaonanWu

# @Date: 2016-12-22 16:16:08

# @Last Modified by: HaonanWu

# @Last Modified time: 2016-12-22 21:34:02

import urllib

import urllib2

import re

import os

from bs4 import BeautifulSoup

if __name__ == '__main__':

url = 'http://www.qiushibaike.com/textnew/page/1/?s=4941357'

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'

headers = {'User-Agent':user_agent}

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

response = urllib2.urlopen(request)

# print response.read()

soup_packetpage = BeautifulSoup(response, 'lxml')

items = soup_packetpage.find_all("div", class_="content")

for item in items:

try:

content = item.span.string

except AttributeError as e:

print e

exit()

if content:

print content + "\n"

这是用BeautifulSoup去抓取书本以及其价格的代码

可以通过对比得出到bs4对标签的读取以及标签内容的读取

(因为我自己也没有学到这一部分,目前只能依葫芦画瓢地写)

# -*- coding: utf-8 -*-

# @Author: HaonanWu

# @Date: 2016-12-22 20:37:38

# @Last Modified by: HaonanWu

# @Last Modified time: 2016-12-22 21:27:30

import urllib2

import urllib

import re

from bs4 import BeautifulSoup

url = "https://www.packtpub.com/all"

try:

html = urllib2.urlopen(url)

except urllib2.HTTPError as e:

print e

exit()

soup_packtpage = BeautifulSoup(html, 'lxml')

all_book_title = soup_packtpage.find_all("div", class_="book-block-title")

price_regexp = re.compile(u"\s+\$\s\d+\.\d+")

for book_title in all_book_title:

try:

print "Book's name is " + book_title.string.strip()

except AttributeError as e:

print e

exit()

book_price = book_title.find_next(text=price_regexp)

try:

print "Book's price is "+ book_price.strip()

except AttributeError as e:

print e

exit()

print ""

以上全部为本篇文章的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

phpdesigner8 php7.0,大家千万别用PHPDesigner8 的项目替换,多说是泪,改整个站点中!

PHP PHPDesigner 项目 替换 乱码 大家千万别用PHPDesigner8 的项目替换,多说是泪,改整个站点中!整个项目中文全是乱码,部分文件UTF-8编码变成ANSI编码,不知道有没有大神教我怎么还原回复讨论(解决方案)没有用svn么?没有的话碰上这种问题真的是蛋痛.没有用svn么&…

python 日志不会按照日期分割_python实现日志按天分割

本文实例为大家分享了python实现日志按天分割的具体代码,供大家参考,具体内容如下日志格式:1.1.1.1 - - [30/Apr/2015:00:34:55 0800] “POST /iDataService/services/MemRoomService HTTP/1.0” 200 405 “-” “Axis/1.4” “-”1.1.1.1 - …

如何分析网站日志文件

很多新手站长对于如何分析网站日志文件一筹莫展,打开.log日志文件看到的只有密密麻麻的数字和字母,细看能看出是什么含义,但是想要系统科学的去进行分析太耗时间,这时一般只能借助于第三方日志分析软件,而下面介绍一种…

不是有效的函数或过程名_过程和函数

VBA代码有两种组织形式,一种是过程,另一种就是函数。其实过程和函数有很多相同之处,除了使用的关键字不同之外,还有不同的是:函数有返回值,过程没有。函数可以在Access窗体,查询中像一般的Acces…

怎么下载php源文件,设计了一个php下载当前文件,却把php源文件下载下来了,为何?...

当我点a.txt下载后,打开txt文件,发现里面的内容不是a.txt本身的内容,而是该php文件中除了php代码的其他文本内容,这样该如何解决?资料下载回复讨论(解决方案)$file_name”a.txt”;$file_dir”./”;if(!file_exists($fi…

自己构造构造函数

/*** description 扩展function的原型* function* obj this的上下文*/if(!Function.prototype.bind){Function.prototype.bind function(obj){var slice [].slice,args slice.call(arguments,1),self this,nop function(){},bound function(){return self.apply(this ins…

浏览器快捷键_浏览器快捷键,让你事半功倍

随着互联网时代的发展,手机、电脑已经成为人们生活中不可或缺得一部分,无论是生活还是工作。尤其是办公室族,几乎每天都要面对电脑7/8个小时,查找各种信息或者浏览新闻,浏览器无可厚非的成为了装机必备的软件&#xff…

java f.lenth返回值,这个是什么意思,求仔细说明

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import java.io.File;import java.io.IOException;import java.util.Random;import java.util.Scanner;public class Test {boolean flagtrue;int count;String word;public static void main(String[] args) {Test t new Test();…

MySQL中的常用函数

1、 字符串函数 2、 字符串函数 模数和被模数任何一个为NULL结果都为NULL。 3、 日期和时间函数 4、 流程函数 5、其他常用函数 MySQL Administrator(图形化管理工具) MySQL Query Brower(客户端查询工具) phpMyAdmin(…

小程序iconfont报错_【经验】开发微信小程序经验总结

一.技术要求(语言方面)有H5或H4和CSS3的书写经验,没有建议观看B站中的 渡一教育-Web前端开发(html css不算语言)。强烈推荐他们的视频,主讲人没有口音且视频质量很高,是哈尔滨理工大学毕业之后进入阿里工作的Web前端工程师 姬成老师。JavaScr…

超市商品管理系统php,超市商品管理系统(含附源代码)超市商品管理系统(含附源代码).doc...

超市商品管理系统(含附源代码)超市商品管理系统(含附源代码)黔南民族师范学院软件设计课程设计报告题 目: 超市商品管理系统系部名称:计科系专业名称:信息管理与信息系统班 级:B12计信班学号:1208045139学生姓名 &…

IOS_OC_id ,NSObject, idlt;NSObjectgt;差别

我们常常会混淆下面三种申明&#xff08;我是没有留意过&#xff09;&#xff1a; 1. id foo1; 2. NSObject *foo2; 3. id<NSObject> foo3;第一种是最经常使用的&#xff0c;它简单地申明了指向对象的指针&#xff0c;没有给编译器不论什么类型信息&#xff…

python移动端web开发代码_移动web前端开发,前端开发工作总结,移动端页面开发-我主页-一个前端程序猿的博客...

热门推荐html/css一、escape和它们不是同一类简单来说&#xff0c;escape是对字符串(string)进行编码(而另外两种是对URL)&#xff0c;作用是让它们在所有电脑上可读。编码之后的...标签&#xff1a;03-22html/css场景&#xff1a; 在项目开发过t程中需要找到url中某个参数的值…

tablednd保存 php,JQuery-tableDnD 拖拽的基本使用介绍

在页面上导入js复制代码 代码如下:jquery-1.3.2.min.jsjquery.tablednd_0_5.js注意&#xff1a;一定要先导入jquery-1.3.2.min.js 否则出错。建table复制代码 代码如下:1Onesome text2Twosome text3Threesome text4Foursome text5Fivesome text6Sixsome text插入js代码复制代码…

移动端页面0.5px border的实现

移动端上经常发现1px边框异常的粗&#xff0c;因此&#xff0c;决定用伪类配合css3来实现0.5px边框 代码如下&#xff1a; 1 <!doctype html>2 <html lang"en">3 <head>4 <meta content"widthdevice-width, initial-scale1.0, maximum-sc…

python 漂亮界面demo_在这个什么都看脸的时代,如何用 GUI 提高 python 程序的颜值?...

0、前言有不少初学者会问&#xff0c;Python 写的程序看起来好丑啊&#xff0c;只能在那个黑黑的框里运行吗&#xff1f;隔壁家的 JS 好像挺好看的&#xff0c;还能有酷炫效果呢……其实呢&#xff0c;术业有专攻&#xff0c;Python 擅长的领域在后台服务器、数据处理、科学计算…

mysql5.3开发文件,cent0s 5.3该下载哪个版本的 mysql安装文件比较合适

我当前的linux是cent0s 5.3请问应该下载哪个版本的 mysql安装文件比较合适&#xff1f;&#xff1f;* Windows* Windows x64* Linux (non RPM packages)* Linux (non RPM, Intel C/C compiled, glibc-2.3)* Red Hat Enterprise Linux 3 RPM (x86)* Red Hat Enterprise Linux 3 …

【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java

【LeetCode】Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node. 递归和非递归&#xff0c;此提比较简单。广度优先遍历即可。…

pythonopencv的配置_python配置与使用OpenCV

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

php中datetime,珍藏 PHP中DateTime的常用方法

前言实例化对象前面加\表示的是&#xff0c;在命名空间中使用原生的类&#xff0c;如果没有使用命名空间的话&#xff0c;可以把前面的\给删除掉输出当前时间$datetime new \DateTime;print_r($datetime->format(Y-m-d H:i:s));输出给定的时间$datetime new \DateTime(201…