python爬虫练习【作文吧】

声明:本次爬虫仅为个人练习,无任何获利行为。

目标网站:作文吧

目标链接:https://www.zuowen8.com

实现功能:通过多进程爬取各个年级的作文,并将各年级的文件夹保存在本地本年级文件夹下

练习目的:练习python爬虫之bs4、os创建文件夹、文件输出、多进程

最终实现截图:

 总结:

  1. 作文吧没有反爬机制,是作为练习爬虫的一个不错的网站,通过解析首页获取各个年级的作文页面,再通过各个年级的作文页面获取当前年级下每篇作文的页面,整个流程可以使用BeautifulSoup可以获取下一级的URL再进行解析;
  2. 工具函数level中,如果传入的参数为class 'bs4.element.Tag'类型的话会有“maximum recursion depth exceeded while getting the str of an object”错误,通过网上资料也不知道是什么原因,解决方法就是转换为str类型,再在level函数中通过bs4.BeautifulSoup再转换为class 'bs4.element.Tag'类型,再进行相应操作。如果有知道的朋友麻烦告知一下,让我学习学习!

  3. 创建文件或文件名时可能会有非法字符,可以通过通过正则匹配去掉非法字符

    #h1为爬取下来的文件名
    h1 = re.sub('[\/:*?"<>|]', '', str)

部分代码如下:

#解析每一篇作文页面
def parse_page(url, dir_file_one, dir_file_two):
	soup = get_res_soup(url)

	#使用正则去掉非法字符,避免创建文件出错
	h1 = re.sub('[\/:*?"<>|]', '', soup.find('h1').text)
	print(dir_file_one, '------>', dir_file_two, '------->', h1)
	
	page_content = soup.find('div', class_ = 'content').text

	filename = './' + dir_file_one + '/' + dir_file_two
	if not os.path.exists(filename):
		os.makedirs(filename)

	with open(filename + '/' + h1 + '.txt', 'a', encoding = 'utf-8') as f:
		f.write(h1)
		f.write(page_content)
		f.close()

def level(href, filename_one):

	href_soup = bs4.BeautifulSoup(href, 'html.parser')
	href_a = href_soup.find_all('a')
	for i in range(len(href_a)):

		url = url_q.format(href_a[i]['href'])
		bj = href_a[i].text
		parse_page_url(url, filename_one, bj)

main函数如下:

def main():
	bj_href_list = parse_allpage(url_q.replace('{}', ''))
	for bj_href in bj_href_list:
		#如果传入的参数为class 'bs4.element.Tag'类型的话会报错,传入str类型就不会
		t1 = multiprocessing.Process(target = level, args = (str(bj_href[0]), bj_href[1]))
		t1.start()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值