Python爬虫:抓取网站所有页面
导入必要的库/nfrom bs4 import BeautifulSoup/nimport requests/nimport re/nfrom pachong import url_manager/n/n# 设置根网址/nroot_url = 'http://www.crazyant.net'/n/n# 初始化URL管理器/nurls = url_manager.UrlManager()/nurls.add_new_url(root_url)/n/n# 打开文件/nfout = open('crow_all_pages.text', 'w')/n/n# 循环爬取网页/nwhile urls.has_new_url():/n # 获取当前URL/n curr_url = urls.get_url()/n # 请求网页/n r = requests.get(curr_url, timeout=3)/n # 判断请求是否成功/n if r.status_code != 200:/n print('error', 'return status_code is not 200', curr_url)/n continue/n # 解析网页/n soup = BeautifulSoup(r.text, 'html.parser')/n # 获取网页标题/n title = soup.title.string/n # 把URL和标题写入文件/n fout.write('%s/t%s/n' % (curr_url, title))/n fout.flush()/n print('success: %s, %s, %d' % (curr_url, title, len(urls.new_urls)))/n # 获取所有链接/n links = soup.find_all('a')/n # 遍历链接/n for link in links:/n # 获取链接地址/n href = link.get('href')/n if href is None:/n continue/n # 匹配需要爬取的链接地址/n pattern = r'^http://www.crazyant.net//d+.html$'/n if name == 'main':/n if re.match(pattern, href):/n urls.add_new_url(href)/n/n# 关闭文件/nfout.close()/n/n# 代码优化建议:/n# 1. 可以在请求网页之前先判断URL是否已经被爬取,如果已经被爬取则跳过该URL,以避免重复爬取。/n# 2. 可以使用多线程或协程技术来提高爬取效率,同时加入线程池或进程池,以充分利用计算机资源。/n# 3. 可以使用分布式爬虫框架,如Scrapy或PySpider等,以实现高效、稳定、可扩展的爬虫系统。
原文地址: https://www.cveoy.top/t/topic/m5vY 著作权归作者所有。请勿转载和采集!