爬虫实战【1】使用python爬取博客园的某一篇文章

第一次实战,我们以博客园为例。

Cnblog是典型的静态网页,通过查看博文的源代码,可以看出很少js代码,连css代码也比较简单,很适合爬虫初学者来练习。

博客园的栗子,我们的目标是获取某个博主的所有博文,今天先将第一步。

第一步:已知某一篇文章的url,如何获取正文?

举个栗子,我们参考‘农民伯伯’的博客文章吧,哈哈。他是我关注的一个博主。

http://www.cnblogs.com/over140/p/4440137.html

这是他的一篇名为“【读书笔记】长尾理论”的文章。

我们如果想要存储这篇文章,需要保存的内容首先是文章的标题,再就是文章的正文。

文章的标题怎么获取的?

先看一下文章标题在网页源代码中的位置是如何的。

可以看出来,标题的文字内容是包含在一个a标签里面的,我们将这个标签打印出来:

<a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/over140/p/4440137.html">【读书笔记】长尾理论</a>

那个标签具有id属性,值为“cb_post_title_url”,具有class属性,值为“postTitle2”,还具有一个href属性,指向了这篇文章的url。

这个标签应该是比较方便定位的,所以文章标题我们能够很快找到。

代码如下:

import urllib.request
import re

url=‘http://www.cnblogs.com/over140/p/4440137.html‘
req=urllib.request.Request(url)
resp=urllib.request.urlopen(req)
html_page=resp.read().decode(‘utf-8‘)

title_pattern=r‘(<a.*id="cb_post_title_url".*>)(.*)(</a>)‘
title_match=re.search(title_pattern,html_page)
title=title_match.group(2)
#print(title)

上面的title就是我们想要爬取的这篇文章的代码

文章的正文如何获取呢?

来看一下文章的结构,正文的所有内容都在一个div标签里面,但是这个div中存在很多其他标签,并不是直接一堆文字放在div标签里面。比如有很多<p></p>标签,比如<strong>标签。

如何获取所有的内容呢?

我猜测,只要将所有><之间的内容,应该就可以获得所有的正文内容。试一下,代码如下:



div_pattern=r‘<div>(.*)</div>‘

div_match=re.search(div_pattern,html_page)

div=div_match.group(1)

#print(div)

result_pattern=r‘>(.*)<‘

result_match=re.findall(result_pattern,div)

result=‘‘

for i in result_match:

    result+=str(i)

print(result)

遗憾的是,失败了。。。打印出来的内容,不仅包含文字,还有一些包含在内的标签,比如<span>。

用正则表达式的缺陷这里就体现出来了。。我们还是用BeautifulSoup来解析文档吧。

使用BeautifulSoup解析内容的方法,请回顾我所写的爬虫入门的文章。

获取正文所在的div标签的代码如下:



from bs4 import BeautifulSoup

soup=BeautifulSoup(html_page,‘html.parser‘)

#print(soup.prettify())

div=soup.find(id="post_body")

#print(div.text)

print(div.get_text())

哈哈,大功告成,我们获得了正文的内容。为了便于保存,我们将文章保存到当前目录下。

filename=title+‘.txt‘

with open(filename,‘w‘,encoding=‘utf-8‘) as f:

    f.write(div.text)
 

OK了,至此为止,我们获取并保存了这篇文章。

来,所有的代码如下所示:



import urllib.request

import re

from bs4 import BeautifulSoup

url=‘http://www.cnblogs.com/over140/p/4440137.html‘

req=urllib.request.Request(url)

resp=urllib.request.urlopen(req)

html_page=resp.read().decode(‘utf-8‘)

title_pattern=r‘(<a.*id="cb_post_title_url".*>)(.*)(</a>)‘

title_match=re.search(title_pattern,html_page)

title=title_match.group(2)

#print(title)

‘‘‘

div_pattern=r‘<div>(.*)</div>‘

div_match=re.search(div_pattern,html_page)

div=div_match.group(1)

#print(div)

result_pattern=r‘>(.*)<‘

result_match=re.findall(result_pattern,div)

result=‘‘

for i in result_match:

    result+=str(i)

print(result)

‘‘‘

soup=BeautifulSoup(html_page,‘html.parser‘)

#print(soup.prettify())

div=soup.find(id="post_body")

#print(div.text)

print(div.get_text())

filename=title+‘.txt‘

with open(filename,‘w‘,encoding=‘utf-8‘) as f:

    f.write(div.text)

				
时间: 2024-08-04 03:48:35

爬虫实战【1】使用python爬取博客园的某一篇文章的相关文章

Python - 爬取博客园某一目录下的随笔 - 保存为docx

1 #coding:utf-8 2 import requests 3 from bs4 import BeautifulSoup 4 import MySQLdb 5 6 7 def get_html(url): 8 ''' 9 获取页面HTML源码,并返回 10 ''' 11 html = requests.get(url) 12 content = html.text.encode('utf-8') 13 return content 14 15 def get_blog_html_lis

python爬取博客园首页文章

先上代码,比较长. 1 # -*- coding=utf-8 -*- 2 __author__ = 'lhyz' 3 4 import urllib 5 import re 6 import socket 7 import time 8 import os 9 10 #使用当前时间创建文件夹 11 ISOTIMEFORMAT='%Y-%m-%d-%X' 12 times=time.strftime( ISOTIMEFORMAT, time.localtime() ) 13 dir='./%s'%

Python爬虫爬取博客园并保存

Python爬虫爬取博客园并保存        爬取博客园指定用户的文章修饰后全部保存到本地 首先定义爬取的模块文件: crawlers_main.py 执行入口 url_manager.py url管理器 download_manager.py 下载模块 parser_manager.py html解析器(解析html需要利用的内容) output_manager.py 输出html网页全部内容文件(包括css,png,js等) crawlers_main.py 执行入口 1 # coding

运用python抓取博客园首页的所有数据,而且定时持续抓取新公布的内容存入mongodb中

原文地址:运用python抓取博客园首页的所有数据,而且定时持续抓取新公布的内容存入mongodb中 依赖包: 1.jieba 2.pymongo 3.HTMLParser # -*- coding: utf-8 -*- """ @author: jiangfuqiang """ from HTMLParser import HTMLParser import re import time from datetime import date im

运用python抓取博客园首页的全部数据,并且定时持续抓取新发布的内容存入mongodb中

原文地址:运用python抓取博客园首页的全部数据,并且定时持续抓取新发布的内容存入mongodb中 依赖包: 1.jieba 2.pymongo 3.HTMLParser # -*- coding: utf-8 -*- """ @author: jiangfuqiang """ from HTMLParser import HTMLParser import re import time from datetime import date im

java爬虫爬取博客园数据

网络爬虫 编辑 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. 网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫(General Purpose Web Crawler).聚焦网络爬虫(Focused Web Crawler).增量式网络爬虫(Incremental Web Crawler).深层网络爬虫(Deep We

Python+webdriver爬取博客园“我的闪存”并保存到本地

前篇 用webdriver+phantomjs实现无浏览器的自动化过程 本篇 想法与实现 我想要将博客园“我的闪存”部分内容爬取备份到本地文件,用到了WebDriver和Phantomjs的无界面浏览器.对于xpath的获取与校验需要用到firefox浏览器,安装firebug和firepath插件.代码如下: # -*- coding: utf-8 -*- import os,time from selenium import webdriver from selenium.webdriver

【Python3 爬虫】爬取博客园首页所有文章

首先,我们确定博客园首页地址为:https://www.cnblogs.com/ 我们打开可以看到有各种各样的文章在首页,如下图: 我们以上图标记的文章为例子吧!打开网页源码,搜索Docker,搜索结果如下图: 从上图后红色标记部分可以看出,我们使用正则表达式即可匹配该网址,我们匹配到该网址之后,将该网址对应的内容下载到到底进行存储. 实现代码 import urllib.request import re """ 爬取cnblogs首页所有的文章 ""&

nodejs爬取博客园的博文

其实写这篇文章,我是很忐忑的,因为爬取的内容就是博客园的,万一哪个顽皮的小伙伴拿去干坏事,我岂不成共犯了? 好了,进入主题. 首先,爬虫需要用到的模块有: express ejs superagent (nodejs里一个非常方便的客户端请求代理模块) cheerio (nodejs版的jQuery) 前台布局使用bootstrap 分页插件使用 twbsPagination.js 完整的爬虫代码,在我的github中可以下载.主要的逻辑代码在 router.js 中. 1. 爬取某个栏目第1页