这是我写的第一个具有完整功能的爬虫小程序,仅此以开始入门爬虫。
编写语言:python3.6
编写工具:pycharm
系统环境:win10
使用的库:requests

在写的过程中,发现到正则和编解码的问题很重要。尤其是在打开一个文件的时候,如果未指定编码格式,系统以默认方式打开的文件,很多情况下遇到不能解码的字符,就会出现异常。
以下是代码部分:

import requests
import re
import os
import codecs
# 导入编码器模块,以便更改打开文件时的编码格式。


class Spider(object):

    def __init__(self):
        self.headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}
        # 伪装以浏览器方式请求。

    def loadpage(self):
        begin_page = int(input('请输入起始页:'))
        end_page = int(input('请输入终止页:'))

        for page in range(begin_page, end_page + 1):
            url = 'http://jandan/duan/page-' + str(page) + '#comments'
            # 煎蛋段子所在的页面地址。
            print('正在下载第%d页' % page)

            response = requests.get(url, headers=self.headers)
            # 构造最终需要的url,并使用get获得响应。
            gbk_html = response.text
            # 获得响应的文本(此处的解码是requests模块读取网页的编码格式而自动解码返回的文本。)
            pattern = repile(r'<div.*?class="text">.*?<p>(.*?)</p>.*?</div>', re.S)
            # 写入正则格式,每一页的段子文本都被text类的div中的p标签包裹。
            item_list = pattern.findall(gbk_html)
            item_list.pop()
            # 在匹配出来之后,发现每一页的最后一行总有一串类似css行内属性的一段代码,而且它也是存在
            # 于p标签中,于是将每个列表中的最后一项删除。

            i = 1
            text = ''
            for item in item_list:

                item = str(i) + '、' + item.replace('<p>', '').replace('</p>', '')\
                    .replace('&ldquo;', '').replace('&hellip;', '')\
                    .replace('\r\n\t\u3000\u3000', '')\
                    .replace('\r\n', '').replace('&rdquo;', '')\
                    .replace('\r\n\r\n', '').replace('<br />', '')\
                    .replace('<br/>', '').replace('&zwj;', '').replace('\t', '')\
                    .replace('&#8220;', '')
                # 很丑的一段代码,但是并不影响功能。
                # 这段代码用来把筛选出来的字符串中的换行符之类的替换成空字符,以便阅读。
                # 如果文本中出现了妨碍阅读的部分,可以随时添加。

                text += item + '\r\n'
                # 为每一段字符串添加换行,windows中的换行是\r\n。
                i += 1
            page = '煎蛋段子第' + str(page) + '页.txt'
            self.download(page, text)

    def download(self, page, text):
        print('正在存储' + page)
        os.chdir('F:\scrapy')
        # 更改当前程序操作的路径。
        with codecs.open(page, 'w', 'utf-8') as f:
            # 使用编译器文件,以便更改打开文件的编码格式,以防止写入时出现的各种编码错误。
            f.write(text)
            print('ok!')


def main():
    new_spider = Spider()
    new_spider.loadpage()

if __name__ == '__main__':
    main()

更多推荐

【爬虫】爬取煎蛋上的段子