Python之爬取CSND博客

Python之爬取CSND博客

1.知识点要求

  • 2.1 Python基础知识(List和Tuple)
  • 2.2 urllib模块、超时设置、自动模拟http请求之get方法和post方法
  • 2.3 异常处理与浏览器伪装技术实战

如果你对相关知识有些遗忘,可以点上面的链接,熟悉一下相关知识点。

2.爬取CSND博客首页信息实战

目的:爬取csdn博客首页上的所有新闻连接,并下载到本地文件夹中。

(1)进入csdn博客首页(https://blog.csdn.net/),点击鼠标右键,点击查看网页源代码,然后,在源代码网页中按ctrl + f键,会出现搜索框。

(2)在博客首页中复制一些新闻的标题,然后在搜索框中搜索复制的标题,找到搜索到的内容,观察该新闻的连接特征。再多换几个标题试试。

Python之爬取CSND博客

这里插入图片描述

3)换了几个标题之后你会发现大多数的连接的局部地方,都只是红色部分的连接不一样,其余部分一样。那这样我们可以设置正则表达式<a.*?href="(.*?)" target="_blank"

Python之爬取CSND博客
Python之爬取CSND博客

sdn首页的信息进行爬取

#首先导入模块

import re

import urllib.request

import urllib.error

#要爬取的网的网站

url = "https://blog.csdn.net/"

#获得网页当前信息

page = urllib.request.urlopen(url).read().decode('utf-8', 'ignore') #参数'ignore'表示解码遇到异常时忽略异常,继续解码

#设置正则表达式

pat = '<a.*?href="(.*?)" target="_blank"'

#从网页信息中匹配出我们要的信息

links = re.compile(pat).findall(page)

print(links[:12])

#存放爬取的新闻网址信息

for i in range(0, len(links)):

#防止出现异常,而停止信息爬取,采用异常处理措施

try:

urllib.request.urlretrieve(links[i], "D:\python\news\"+str(i)+".html")

except urllib.error.HTTPError as e:

if hasattr(e, 'code'):

print(e.code)

if hasattr(e, 'reason'):

print(e.reason)

print('爬取成功!')

(5)运行上面的代码我们会发现错误,爬取信息爬到了一半就中断了,分析错误原因,发现是出现了非网址的字符串

Python之爬取CSND博客

(6)所以

用语句links = [link for link in links if link[:4]=='http']将不是网址的字符串过滤掉,所以,最终代码如下:

#首先导入模块

import re

import urllib.request

import urllib.error

#要爬取的网页的站

url = "https://blog.csdn.net/"

#获得网页当前信息

page = urllib.request.urlopen(url).read().decode('utf-8', 'ignore') #参数'ignore'表示解码遇到异常时忽略异常,继续解码

#设置正则表达式

pat = '<a.*?href="(.*?)" target="_blank"'

#从网页信息中匹配出我们要的信息

links = re.compile(pat).findall(page)

print(len(links))

#爬取的过程中发现了异常,存在:<a href="/nav/ai" target="_blank">这样的代码,获取的不是网址,所有要进行过滤

links = [link for link in links if link[:4]=='http']

print(len(links))

#存放爬取的新闻网址信息

for i in range(0, len(links)):

#防止出现异常,而停止信息爬取,采用异常处理措施

try:

urllib.request.urlretrieve(links[i], "D:\python\news\"+str(i)+".html")

except urllib.error.HTTPError as e:

if hasattr(e, 'code'):

print(e.code)

if hasattr(e, 'reason'):

print(e.reason)

print('爬取成功!')

(7)运行程序,可以看见我们过滤掉了21个非网址字符串,我这里是从0开始一直爬到122,说明我获取到的网页信息全部爬取成功!

Python之爬取CSND博客
Python之爬取CSND博客
Python之爬取CSND博客
Python之爬取CSND博客

下面是为初学者们准备的python电子书籍资料和python入门教程!

Python之爬取CSND博客
Python之爬取CSND博客

请关注+私信回复:“学习”就可以拿到一份我为大家准备的Python学习资料!

相关推荐