这是我写的第一个具有完整功能的爬虫小程序,仅此以开始入门爬虫。
编写语言: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('“', '').replace('…', '')\
.replace('\r\n\t\u3000\u3000', '')\
.replace('\r\n', '').replace('”', '')\
.replace('\r\n\r\n', '').replace('<br />', '')\
.replace('<br/>', '').replace('‍', '').replace('\t', '')\
.replace('“', '')
# 很丑的一段代码,但是并不影响功能。
# 这段代码用来把筛选出来的字符串中的换行符之类的替换成空字符,以便阅读。
# 如果文本中出现了妨碍阅读的部分,可以随时添加。
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()
更多推荐
【爬虫】爬取煎蛋上的段子
发布评论