博客爬虫(python爬虫的简单应用)

        本文章来记录下python结课时我的爬虫课设。

        前面会写的稍微详细一些,完整代码的话会放在文章最后。

1、问题描述(功能要求):

目标网站:https://www.kingname.info/archives/

目标内容:如下图所示内容,包括文章标题、发布时间、文章分类、文章链接、文章正文(HTML格式)。

博客爬虫(python爬虫的简单应用)_第1张图片

 

(1)爬取列表页第1页所有的文章标题和文章详情;

(2)并保存爬取信息;

(3)截取与正文相关的源代码并保存;

看完问题描述之后,接下来就是分析和实践。

1.向目标网页发出请求

        定义的head字典是用来装请求头信息的,你添加的键值对越多,目标网站就越认为你是真实的用户,但本次的目标网站反爬措施较为简单(好像就没有反爬措施),所以我在head字典里面就添加了基础的User-Agent这个键值对,这个键值对是用来描述你的操作系统、浏览器等信息。

        在这里我还加入了异常处理,如果遇到异常的话,e.code会打印状态码,e.reason会打印出错原因。这个函数最后返回的对象是目标网页的全部源代码。

def gethtml(url):
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75"
    }

    request = urllib.request.Request(url, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode('utf-8')
    except urllib.error.URLError as e:
        if hasattr(e, 'code'):  # 如果有错误信息,将e里的code打印出来
            print(e.code)
        if hasattr(e, "reason"):  # 如果返回对象里面有reason这个对象,就看里面的reason
            print(e.reason)
    return html

2.获取目标网站博客的文章标题、文章发布时间和文章详情链接

        虽然这个函数代码多点,但比较简单。首先定义三个列表datalist,datatime,datalink来分别存储文章标题,文章发布时间和文章链接。然后就是定义正则表达式,匹配需要的数据,再分别把三个目标内容存到指定的列表中。这里用了BeautifulSoup这个库,因为它处理数据比较方便。

        最后需要注意一点的是,

data = re.findall(finddata, str(item))[0]和alink = re.findall(findalink, str(item))[0]

这两行最后都有个[0],这是因为我在匹配文章标题和文章链接这两个数据时用的是正则表达式,不像找文章发布时间那样直接用的是find()函数,re.findall()返回的是一个列表,所以要加上[0]来表示需要的是返回列表中的第一个元素。

def gettitle(url):
    datalist = []
    datatime = []
    datalink = []

    findalink = re.compile('