前言:
python凭借其简单易学和有着丰富的第三方库的特性,广受爬虫开发者的喜欢,让大家能用很少的代码和极短的时间完成采集数据的任务,但是由于python是一个动态语言,在运行前对数据类型几乎没啥检查能力,这就导致了一个问题,大型项目协作会出现效率低下,所以,开发代码时的规范就显得尤为关键了,一个简单的爬虫代码虽然量不大,但是在生产环境中,要考虑各种情况,项目也会逐渐变得臃肿,下边我从几个方面,简单聊聊开发爬虫代码应注意的问题及应遵守的规范
合理命名和封装
给大家看两段简单的代码
url = 'https://example.com'
r = requests.get(url)
tt = response.text
ss = BeautifulSoup(tt, 'html.parser')
ks = ss.find_all('a')
for l in ls:
print(l.get('href'))
class WebScraper:
def __init__(self, url):
self.url = url
def fetch_html_content(self):
response = requests.get(self.url)
if response.status_code == 200:
return response.text
else:
print("Failed to fetch HTML content. Status code:", response.status_code)
return None
def parse_links(self, html_content):
if html_content:
soup = BeautifulSoup(html_content, 'html.parser')
links = soup.find_all('a')
return [link.get('href') for link in links]
else:
return []
if __name__ == "__main__":
url = 'https://www.baidu.com'
scraper = WebScraper(url)
html_content = scraper.fetch_html_content()
if html_content:
links = scraper.parse_links(html_content)
for link in links:
print(link)
以上两段代码功能是一样的,你更喜欢哪一段代码呢,相信所有人都更喜欢第二段代码,第二段代码有以下有优点:
1.可读性提高:类和方法的命名清晰明了,易于理解代码的功能。
2.可维护性提高:如果需要修改爬虫的逻辑,只需要修改类中的相应方法,而不需要修改其他部分的代码。
3.代码复用性增强:如果你需要在其他地方使用相同的爬虫逻辑,只需要实例化一个新的WebScraper
对象即可,而不需要复制粘贴原始的代码。
综上所述,通过合理命名和封装,我们可以使代码更加清晰、易读、易维护和可复用。
提高健壮性
由于爬虫处理的数据来自外部,有网络波动、数据格式改变等多种不可控因素,遵循编写规范可以减少代码中的错误和异常,提高代码的稳定性和健壮性。
例如,合理处理异常和错误情况,使用适当的异常处理机制,可以使得代码在面对异常情况时能够优雅地处理,而不至于崩溃。以下是一个异常处理的示例:
import requests
try:
assert parsed_url.scheme and parsed_url.netloc and parsed_url.scheme.startswith(("http", "https"))
response = requests.get(parsed_url)
response.raise_for_status()
data = response.json()
news_list = data.get('list', [])
except requests.HTTPError as e:
print('HTTP error occurred:', e)
except Exception as e:
print('An unexpected error occurred:', e)
以上的代码,碰到了url不合法,response状态码异常,json字段缺失等问题都不会崩溃,而是进入相应的异常处理逻辑,我们在爬虫开发中也应该尽量多的去考虑异常情况,提高代码健壮性。
小结
遵循代码开发规范,是一个非常重要的事情,能防止传说中的“屎山”代码,其次随着代码量的增大,规范的代码是能极大的提高工作效率以及和别人的沟通效率的,优秀的项目,应该是可读性极高,让人能优雅的去阅读和修改,这也是我们在工作中应该有意去锻炼的一个基本功。